Dataframe 警告消息:1:R中的列未知或未初始化

Dataframe 警告消息:1:R中的列未知或未初始化,dataframe,r,data-manipulation,Dataframe,R,Data Manipulation,我有一个像这样的 AID=c("9671608","9671618","9677162") dep=c(23,45,12) t8=c(1,0,2) a1_sum=c(2,10,1) dataall=data.frame(AID,dep,t8,a1_sum) > dataall AID dep t8 a1_sum 1 9671608 23 1 2 2 9671618 45 0 10 3 9677162 12 2 1 我在第二行

我有一个像这样的

AID=c("9671608","9671618","9677162")
dep=c(23,45,12)
t8=c(1,0,2)
a1_sum=c(2,10,1)

dataall=data.frame(AID,dep,t8,a1_sum)
    > dataall
      AID dep t8 a1_sum
1 9671608  23  1      2
2 9671618  45  0      10
3 9677162  12  2      1
我在第二行修改了
a1_sum
的值,如下所示:

dataall$a1_sum[dataall$AID=="9671618"]=1
我成功地做到了这一点,但我收到了以下警告消息,即使在我运行与此数据相关的其他不同代码时也是如此,如下所示:

警告信息: 1:未知或未初始化的列:“a1_sum”

原因可能是什么


谢谢。

我建议如下:

EDIT:正如@r2evans正确地指出的,当只有一种情况时,最好使用
if\u else
而不是
case\u:

library(dplyr)
dataall <- dataall %>% dplyr::mutate(a1_sum = dplyr::if_else(AID == "9671618", 1, a1_sum)


al\u sum
al\u sum
不同。检查你的代码,看看你在哪里输入了小写的
l
而不是数字
1
@r2evans-这段代码有一个棘手的地方,那就是
dataall$AID==“9671618”
被用来子集向量,
dataall$a1_sum[]
,而不是数据帧。废话,你说得对。。。阅读不完整。(看起来仍然像是打字错误引起的问题。)@LenGreski谢谢你的评论。这个代码实际上是一个可复制的代码,我开发它来演示我的实际问题。似乎没有你提到的打字错误。此外,我认为这个问题可能是由于我对数据进行子集划分的方式造成的。除了我的方法之外,还有更有效的方法吗?在执行
dataall$a1_sum[dataall$AID==“9671618”]=1
之前,您是否确实设置了列
a1_sum
?这有时可能会导致问题,因为我看不出你的代码有任何问题。当有一个条件时,我强烈建议
if\u else
而不是
case\u When
,因为它应该快得多。我认为当测试数量增加时,
case\u当
胜出,类似于多个嵌套的
if\u else
调用。
library(data.table)
dataall <- data.table::setDT(dataall)
dataall[AID =="9671618", a1_sum :=  1]