我有两个数据框,如下所示:
fun <- function(x){
if(# If the name of x is the same like the name of a column in df1)
out <- df1$? # Here I need to assign df1$"x" somehow
out
}
fun(df2$V1)
如果两个数据帧的列名相同,我需要编写一个将df1的值分配给df2的函数。函数的结构应如下所示:
[1] 1 2 3 4
输出应如下所示:
StandardAnalyzer
不幸的是我自己找不到解决方案。我有办法怎样做吗?非常感谢你提前!
答案 0 :(得分:3)
我需要编写一个函数,将df1的值分配给df2,如果 两个数据帧的列名都是相同的。
你确定需要一个功能吗?
names_in_common <- intersect(names(df1),names(df2))
df2[,names_in_common] <- df1[,names_in_common]
答案 1 :(得分:2)
使用Joachim Schork的代码:
names_in_common <- intersect(names(df1),names(df2))
df2[,names_in_common] <- df1[,names_in_common]
如果你想改变df2的单列:
names_in_common <- intersect(names(df1), names(df2[, "V1", drop=FALSE]))
df2[,names_in_common] <- df1[,names_in_common]
答案 2 :(得分:1)
这是不可能的,因为当您使用美元语法访问data.frame的列时,会丢失列名。 fun()
无法确定作为参数传递的向量的列名。
相反,你可以简单地使用列名称本身作为参数来调用fun()
,而不是NAs的向量,它们在函数内部并没有用处。换句话说,呼叫变为
fun('V1');
然后你可以按如下方式编写函数:
fun <- function(name) df1[[name]];
演示:
fun('V1');
## [1] 1 2 3 4
虽然现在我考虑过它,你也可以直接索引df1
,因为现在所有的功能都是这样做的:
df1$V1;
## [1] 1 2 3 4
重新阅读您的问题,您说您要将df1
列分配给df2
,尽管您的示例代码不会这样做。假设你确实想在函数中执行这个赋值,你可以这样做:
fun <- function(name) df2[[name]] <<- df1[[name]];
演示:
fun('V1');
df2;
## V2 V1 V3
## 1 NA 1 NA
## 2 NA 2 NA
## 3 NA 3 NA
## 4 NA 4 NA