R : Измените имя переменной, используя цикл for

#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