繁体   English   中英

使用粘贴功能从现有列名创建新列名

[英]Creating new column names from existing column names using paste function

假设我有一个数据帧df其中包含变量ABC 我想再创建3个对应的列,名称分别为A_rankedB_rankedC_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
}

他们似乎没人工作。 有人可以告诉我这样做的正确方法是什么吗?

下面是使用虹膜数据集(在这里,我们创建一个基于4个列的data.table选项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)][]

这应该工作:

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)

这有帮助吗?

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

dat %>%
  mutate_each(funs(ranked=sum)) %>% 
  head()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM