【问题标题】:How do I automate adding new columns to dataframe? (R)如何自动向数据框添加新列? (右)
【发布时间】:2019-09-19 03:57:40
【问题描述】:

我正在尝试在 Rstudio 中创建一个脚本,在其中输入一些列,然后它为每个列输入输出一个新列。问题是,我不知道要输入多少列;这个数字会改变。我正在尝试循环创建列,但是我知道的每个命令都需要列的名称,这给我带来了麻烦。我可以为新列创建随机名称,但不能使循环以列名为目标。没有名字,我不能做任何专栏。我可以将名称放在 nametable 中,但 add_column 似乎由于某种原因无法定位它。

如果有人能从这种函数中弄清楚如何添加没有名称的列,或者如何使用名称添加它们,我将不胜感激。

colcount <- ncol(tdata)

nametable <- NULL

for (i in 2:(colcount)){
nametable[i] <- paste("v",i)
}

for (i in 2:(colcount)) {
idk4<- nametable[i]
  tdata <- add_column(tdata,idk4,.after = colcount)
}

更正代码:

rowcount <- nrow(tdata)
colcount <- ncol(tdata)

for (i in 2:ncol(tdata)){
  to_add <- data.frame(name1 = 1:1248)  
for (c in seq_len(ncol(to_add))) {
  tdata[[paste0('v_',i-1)]] <- to_add[,c]
}}

【问题讨论】:

    标签: r


    【解决方案1】:

    数据框本质上只是引擎盖下的列表,因此您可以直接指定列,只要您能想出合适的名称即可。

    df <- data.frame(name1 = rnorm(10), name2 = rnorm(10))
    to_add <- data.frame(name1 = rnorm(10), name2 = rnorm(10))
    
    for(i in seq_len(ncol(to_add))) {
      df[[paste0('v_', i)]] <- to_add[,i]
    }
    
    df
    #>         name1      name2         v_1        v_2
    #> 1   0.1664923 -0.0993323  0.00960158  0.1065084
    #> 2   0.4416025  1.4305505  1.31583098 -0.7034243
    #> 3  -0.2824676 -1.6445144  0.06301939 -0.6026345
    #> 4   0.3295798  0.2456593  2.14454251  0.1950088
    #> 5  -0.2226529  0.6365769  0.02249166 -1.4926480
    #> 6   0.1480690 -0.9051266  0.20976601 -0.5762838
    #> 7  -1.1215822 -0.6685792  0.29167861 -0.5923874
    #> 8   0.8513272 -0.6316098 -1.04509640 -1.9839998
    #> 9  -0.1280242  0.3425758  1.53816824  1.8885009
    #> 10 -0.1315104 -0.9829902 -0.96036102 -1.3502144
    

    reprex package (v0.3.0) 于 2019-09-18 创建

    【讨论】:

    • 谢谢!你的代码把我带到了我需要去的地方。我用更正的代码编辑了帖子,以防有人想看。
    【解决方案2】:

    如果您调试循环,您会看到add_column 正在尝试为每次迭代添加一个名为idk4 的列,并且由于列名重复而中断。如果要添加nametable 中的列名,请使用!!。查看this link了解更多信息:

    tdata = data.frame()
    
    for (i in 2:(colcount)) {
      idk4<- nametable[i]
      tdata <- add_column(tdata,!!(nametable[i]),.after = colcount)
    }
    

    这将是一个零行数据框。要添加值,您需要:= 运算符,如链接所示。也不确定为什么要从 2 开始计数,将 NA 留在位置 1,但这取决于您。

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 2022-12-18
      • 1970-01-01
      • 2023-03-14
      • 2020-12-20
      • 2020-02-24
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多