J'ai un bloc de données similaire à celui-ci. Je souhaite additionner les valeurs des lignes si le texte de la colonne "Nom" est le même avant le signe - .
3 Réponses :
Vous pouvez relier
vos 2 tableaux (haut et bas) dans un bloc de données, puis utiliser dplyr
ou data.table
. Le data.table
serait beaucoup plus rapide pour les grandes tables.
data_framme$Name <- sub("-.*", "", data_frame$Name) library(dplyr) data_frame %>% group_by(Name) %>% summarise_all(sum) library(data.table) data.frame <- data.table(data.frame) data.frame[, lapply(.SD, sum, na.rm=TRUE), by=Name ]
Cette solution séparerait IRON MAIDEN - A et IRON MAIDEN - B. OP veut identifier les groupes de noms avec le même nom avant le signe «-».
Merci @ J.G. pour avoir signalé cela, j'ai modifié ma réponse.
Supprimez tout après "-"
en utilisant sub
, puis utilisez Comment additionner une variable par groupe
df$Name <- sub("-.*", "",df$Name) aggregate(cbind(val1, val2)~Name, df, sum)
Merci, cela fera l'affaire. Mais pouvez-vous m'aider si le bloc de données a les mêmes caractères dans d'autres colonnes, comment puis-je utiliser uniquement des données uniques?
@ GoranKošutić Vous devriez peut-être poster une nouvelle question avec ces détails.
Voici une solution data.table.
Données:
df[, Name := sub("-.*", "", Name)] mat = df[, .(sum(val1), sum(val2)), by = Name] > mat Name V1 V2 1: IRON 3 11 2: SABBATH 7 15
Code:
df = data.table( Name = c('IRON - A', 'IRON - B', 'SABBATH - A', 'SABBATH - B'), val1 = c(1,2,3,4), val2 = c(5,6,7,8) )
Bienvenue dans StackOverflow! Veuillez lire les informations sur comment poser une bonne question et comment donner un exemple reproductible . Cela permettra aux autres de vous aider beaucoup plus facilement.