我正在尝试查看是否可以通过更新一个字段并创建另一个字段来更新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"
答案 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
。