#r #dataframe #statistics #columnname
Вопрос:
У меня есть данные, и векторы содержат имена переменных, из этих векторов я вычисляю сумму переменных, содержащихся в векторе, и я хочу поместить результат в новые переменные, которые имеют разные имена
допустим, у меня есть три вектора
gt;data Name A B C D E r1 1 5 12 21 15 r2 2 4 7 10 9 r3 5 15 6 9 6 r4 7 8 0 7 18
И у меня есть эти векторы, которые генерируются с помощью цикла for, которые находятся в переменной vec
V1 lt;- ("A","B","C") V2 lt;- ("B","D") V3 lt;- ("D","E")
Правка 1 : Эти векторы генерируются с помощью цикла for , и я не знаю , какие векторы будут сгенерированы, или элементы, содержащиеся в этих векторах, здесь я привожу только пример, я хочу рассчитать сумму переменных в каждом векторе и получить результат в новой переменной в моем фрейме данных Проблема в том, что я не знаю, как дать новое имя созданным переменным (которое содержит сумму каждого вектора).
data$column[j] lt;- rowSums(all_data_Second_program[,vec]) j lt;- j 1
Чтобы получить этот результат, например
Name A B C Column1 D Column2 E Column3 r1 1 5 12 18 21 26 15 36 r2 2 4 7 13 10 14 9 19 r3 5 15 6 26 9 24 6 15 r4 7 8 0 15 7 15 18 25
Но я не получил такого результата
Пожалуйста, скажите мне, если вам нужна дополнительная информация или разъяснения, не могли бы вы сказать мне, пожалуйста, как это сделать
Ответ №1:
Поместите векторы в список, а затем вы можете использовать rowSums
в lapply
—
list_vec lt;- list(c("A","B","C"), c("B","D"), c("D","E")) new_cols lt;- paste0('Column', seq_along(list_vec)) data[new_cols] lt;- lapply(list_vec, function(x) rowSums(data[x])) data # Name A B C D E Column1 Column2 Column3 #1 r1 1 5 12 21 15 18 26 36 #2 r2 2 4 7 10 9 13 14 19 #3 r3 5 15 6 9 6 26 24 15 #4 r4 7 8 0 7 18 15 15 25
Комментарии:
1. Векторы генерируются с помощью цикла for, поэтому я не могу создать список, содержащий векторы, поэтому я сгенерировал и обработал каждый вектор внутри цикла for. Есть ли способ добавить каждый столбец отдельно ?
2. Но вы делаете
Vectors lt;- c(V1,V2,V3)
. То, что я предлагаю, — это сделатьVectors lt;- list(V1,V2,V3)
вместо этого. Я использовал имя переменной какlist_vec
вместоVectors
.3. Я отредактировал вопрос, чтобы подробнее описать проблему, пожалуйста, посмотрите мой вопрос еще раз
Ответ №2:
Мы можем использовать for
петлю
for(i in 1:3) { data[[paste0('Column', i)]] lt;- rowSums(data[get(paste0('V', i))], na.rm = TRUE) }
-выход
gt; data Name A B C D E Column1 Column2 Column3 1 r1 1 5 12 21 15 18 26 36 2 r2 2 4 7 10 9 13 14 19 3 r3 5 15 6 9 6 26 24 15 4 r4 7 8 0 7 18 15 15 25