Создание новых имен столбцов из существующих имен столбцов с помощью функции вставки - PullRequest
0 голосов
/ 21 декабря 2018

Предположим, у меня есть фрейм данных df с переменными A, B и C.Я хотел бы создать еще 3 соответствующих столбца с именами A_ranked, B_ranked и C_ranked.Не имеет значения, как я буду заполнять их ради этого вопроса, поэтому давайте предположим, что я установлю их все на 5. Я попробовал следующий код:

for (i in 1:length(df)){
  df%>%mutate(
    paste(colnames(df)[i],"ranked", sep="_")) = 5
}

Я также попробовал:

for (i in 1:length(df)){
  df%>%mutate(
    as.vector(paste(colnames(df)[i],"ranked", sep="_")) = 5
}

И:

for (i in 1:length(df)){
  df$paste(colnames(df)[i],"ranked", sep="_")) = 5
}

Никто из них, похоже, не работает.Может кто-нибудь сказать, пожалуйста, как правильно это сделать?

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Помогает ли это?

dat <- data.frame(A=5,B=5,C=5)

dat %>%
  mutate_each(funs(ranked=sum)) %>% 
  head()
0 голосов
/ 21 декабря 2018

Это должно работать:

df[paste(names(df), "ranked", sep = "_")] <- 5

df

#   A B C A_ranked B_ranked C_ranked
# 1 1 2 3        5        5        5

Данные:

df <- data.frame(A = 1, B = 2, C = 3)
0 голосов
/ 21 декабря 2018

Вот опция data.table, использующая набор данных радужной оболочки (здесь мы создаем еще 4 столбца на основе colnames существующих столбцов).

# data
df <- iris[, 1:4]
str(df)

# new columns
library(data.table)
setDT(df)[, paste(colnames(df), "ranked", "_") := 5][] 

# output
   Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length ranked _
  1:          5.1         3.5          1.4         0.2                     5
  2:          4.9         3.0          1.4         0.2                     5
  3:          4.7         3.2          1.3         0.2                     5
  4:          4.6         3.1          1.5         0.2                     5
  5:          5.0         3.6          1.4         0.2                     5
 ---                                                                        
146:          6.7         3.0          5.2         2.3                     5
147:          6.3         2.5          5.0         1.9                     5
148:          6.5         3.0          5.2         2.0                     5
149:          6.2         3.4          5.4         2.3                     5
150:          5.9         3.0          5.1         1.8                     5
     Sepal.Width ranked _ Petal.Length ranked _ Petal.Width ranked _
  1:                    5                     5                    5
  2:                    5                     5                    5
  3:                    5                     5                    5
  4:                    5                     5                    5
  5:                    5                     5                    5
 ---                                                                
146:                    5                     5                    5
147:                    5                     5                    5
148:                    5                     5                    5
149:                    5                     5                    5
150:                    5                     5                    5 

# If you want to fill new columns with different values you can try something like
setDT(df)[, paste(colnames(df), "ranked", "_") := list(Sepal.Length/2,
                                                       Sepal.Width/2,
                                                       Petal.Length/2,
                                                       Petal.Width/2)][]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...