将行添加到data.frame,但仅添加到某些列

问题描述:

我希望创建一个data.frame并将行添加到特定的列中。我希望剩下的列被指定为NAs。将行添加到data.frame,但仅添加到某些列

我有如下:

#create empty data frame 
x=data.frame(matrix(nrow=0,ncol=3)) 
> x 
[1] X1 X2 X3 
<0 rows> (or 0-length row.names) 

#The data and its corresponding columns 
> y=data.frame(col=c("X1","X3"),val=c(20,30)) 
> y 
    col val 
1 X1 20 
2 X3 30 
#select those columns (works fine) 
> x[,y$col] 
[1] X1 X2 
<0 rows> (or 0-length row.names) 
#select and create a row for those columns and corresponding values 
> x[,y$col]=y$val 
Error in Summary.factor(1:2, na.rm = FALSE) : 
    min not meaningful for factors 

所以,问题是你会如何(有效)创建新的行。我猜应该有办法做到这一点,而不必自己指定NA。

其中一个问题是您的col变量y是一个因素。这很容易被撤消:

y=data.frame(col = c("X1","X3"), val = c(20,30), stringsAsFactors=FALSE) 

接下来,当你做

x[,y$col]=y$val 

不指定行号。这样做虽然会工作:

x[1,y$col] <- y$val 

x 

# X1 X2 X3 
# 1 20 NA 30 

但你很快会遇到的问题,如果你有其他的X1的和X2的写入x数据帧。所以你的算法可能需要一些刷新,除非这真的是你需要的。

+0

这与我上面发布的内容有点不同,但在我的实际应用程序中,我从另一个data.frame中获取val列。即不自己设置它,所以我没有机会设置stringsAsFactors = FALSE。我在我的应用程序中尝试过x [1,y $ col] 2015-04-06 12:23:13

+1

'x [1,as.character(y $ col)]'应该这样做 – 2015-04-06 12:24:35