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.