R “在一个重叠层内分配”;订阅的工作分配中不允许使用NAs“;

R “在一个重叠层内分配”;订阅的工作分配中不允许使用NAs“;,r,R,我正试图重新编码,遇到了一个看似简单的障碍,但在上网询问了很长一段时间后,我还没有弄清楚,所以我非常感谢您能提供的任何帮助 我有一些包含NA的数据。我想使用这些数据重新编码,但继续遇到错误“订阅的工作分配中不允许使用NAs”。当我试图创建一个示例数据集时,我还遇到了一个警告,即我没有“有意义的因素”。任何帮助都将不胜感激 我的人造数据有三个变量:“var1”和“var2”(字符,有时缺失)以及“var3”(数字)。我想创建第四个变量,如果beta大于零,则包含“var1”的值,如果beta小于零

我正试图重新编码,遇到了一个看似简单的障碍,但在上网询问了很长一段时间后,我还没有弄清楚,所以我非常感谢您能提供的任何帮助

我有一些包含NA的数据。我想使用这些数据重新编码,但继续遇到错误“订阅的工作分配中不允许使用NAs”。当我试图创建一个示例数据集时,我还遇到了一个警告,即我没有“有意义的因素”。任何帮助都将不胜感激

我的人造数据有三个变量:“var1”和“var2”(字符,有时缺失)以及“var3”(数字)。我想创建第四个变量,如果beta大于零,则包含“var1”的值,如果beta小于零,则包含“var2”的值。如果缺少var1或var2,我希望也缺少新变量:

var1<-c("A","T",NA,"G","C")
var2<-c("G","A",NA,"A","G")
var3 <-c(-.1,3,-4,5,-3)
df=as.data.frame(cbind(var1,var2,var3))

df$newVar[df$var3>0]=df$var1[df$var3>0]
df$newVar[df$var3<0]=df$var2[df$var3<0]
var1 0]=df$var1[df$var3>0]:
订阅的分配中不允许使用NAs
此外:警告信息:
1:在运算因子中(df$var3,0):>对于因子没有意义
2:在运算因子中(df$var3,0):>对于因子没有意义

df$newVar[df$var3您的问题是您在
data.frame
之前使用了
cbind
,这会将三个变量强制到同一个类中(必须是字符),从而导致在生成data.frame时强制将它们转换为因子

相反,只要去做

df <- data.frame(var1, var2, var3)

您可以大大简化重新编码变量的方式。不要像其他地方已经指出的那样使用
cbind
,但是…您可以提供订阅变量的2列矩阵来子集您的数据帧。因此,我们可以这样做:

df <- data.frame( var1 , var2 , var3 )

#  Gives 1 if 'var3' is greater than 0 and 2 otherwise (the numbers of the columns you want!)
ind <- (! df$var3 > 0) + 1
#[1] 2 1 2 1 2

#  Get each row selecting either column 1 or two
df$newVar <- df[ cbind( 1:nrow(df) , ind ) ]
# var1 var2 var3 newVar
#1    A    G -0.1      G
#2    T    A  3.0      T
#3 <NA> <NA> -4.0   <NA>
#4    G    A  5.0      G
#5    C    G -3.0      G

df您想将什么重新编码为什么?在这里显示所需的输出可能会有所帮助。您是否尝试过使用
ifelse
语句?可能重复Hi,我注意到您从未投票/接受过答案。您可能想阅读网站的和部分,以帮助您从中获得最大的收益。如果一个答案确实解决了您的问题你可能想考虑投票和/或标记它被接受来显示问题已经被回答了,通过在适当的答案旁边划小绿勾。你没有义务这样做,但是它有助于保持网站干净的未回答的问题和奖励那些花时间来解决你的问题的人。+ 1我正在写这个U。但我主张用一种更简单/更有效的方法来划分子集。
  var1 var2 var3 newVar
1    A    G -0.1      2
2    T    A  3.0      4
3 <NA> <NA> -4.0     NA
4    G    A  5.0      3
5    C    G -3.0      2
df <- data.frame( var1 , var2 , var3 )

#  Gives 1 if 'var3' is greater than 0 and 2 otherwise (the numbers of the columns you want!)
ind <- (! df$var3 > 0) + 1
#[1] 2 1 2 1 2

#  Get each row selecting either column 1 or two
df$newVar <- df[ cbind( 1:nrow(df) , ind ) ]
# var1 var2 var3 newVar
#1    A    G -0.1      G
#2    T    A  3.0      T
#3 <NA> <NA> -4.0   <NA>
#4    G    A  5.0      G
#5    C    G -3.0      G