在R中,我可以一次更新列,也可以创建一个新列吗?

时间:2019-01-18 19:32:29

标签: r dataframe

我正在尝试查看是否可以通过更新一个字段并创建另一个字段来更新R数据帧,因此在一次传递/行中总共有两个字段。

我尝试了以下操作: field1是要更新且已经存在的字段,而field2是将被新创建的字段。

df[field1, field2] <- cbind(" added text", "newfield")

但是由于field2不存在,所以出现错误:object 'field2' not found

我知道显然可以通过以下两个步骤来手动分配它,但是我想避免使用意大利面条式的代码,因为我必须重复很多字段:

df$field1[df$field1 == "Original"] <- "Original added text"
df$field2 <- "newfield"

2 个答案:

答案 0 :(得分:0)

这是使用data.table的一个选项。试试:

df <- iris
df$Species <- as.character(df$Species)
# let's say that Species is the field to update and already exists,  
# while Species2 is the field that would be newly created
library(data.table)
setDT(df)[Species == "setosa",
          c("Species", "Species2") := list("Original added text",
                                           "Species2")][]

答案 1 :(得分:0)

这是使用purr的解决方案:

sample_df<-iris
sample_df$Species<- NULL

library(purrr)

walk2(.x = list(Species=iris$Species,
          Sepal.Length=sample_df$Sepal.Length*100),
      .y = c("Species", "Sepal.Length"),
      function(x,y) {sample_df[y]<<-x})

sample_df

这里的逻辑是将变量的内容和变量的名称作为单独的argumetn传递,以一个作为参考,另一个作为内容进行组合。

如果您经常在代码中执行此操作,则建议使用mutate包中的dplyr