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

将行添加到data.frame,但仅添加到某些列,r,dataframe,R,Dataframe,我希望创建data.frame并添加行,但仅添加到某些列。我希望将其余列指定为NAs 我的资料如下: #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

我希望创建data.frame并添加行,但仅添加到某些列。我希望将其余列指定为NAs

我的资料如下:

#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

所以问题是如何高效地创建新行。我猜应该有一种方法可以做到这一点,而不用自己指定NAs

问题之一是y中的col变量是一个因子。这很容易撤销:

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数据帧,则很快就会遇到问题。因此,您的算法可能需要一些改进,除非这是您真正需要的。

这与我上面发布的有所不同,但在我的实际应用程序中,我从另一个data.frame中获取val列。i、 e.没有自己设置,因此我没有机会设置StringsAsAffactors=FALSE。我尝试了x[1,y$col]x[1,正如.charactery$col]应该做的那样