Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table-在新列中设置值,其中其他列中的值=1_R_Data.table_Kaggle - Fatal编程技术网

R data.table-在新列中设置值,其中其他列中的值=1

R data.table-在新列中设置值,其中其他列中的值=1,r,data.table,kaggle,R,Data.table,Kaggle,你可以从卡格尔那里认出这一点。我有多个名为Soil_Type1的专栏,一直到Soil_Type40。如果该土壤类型不存在,则值为0;如果存在,则值为1。每行只能有一种土壤类型 我想创建一个新列,如果Soil_Type1=1,则该列的值为S1,如果Soil_Type2=1,则该列的值为S2,等等。我可以使用蛮力操作,即每次执行每一行。有没有办法循环这个 train_raw[,16:53 := lapply(.SD, as.character), .SDcols =16:53 ] train_ra

你可以从卡格尔那里认出这一点。我有多个名为Soil_Type1的专栏,一直到Soil_Type40。如果该土壤类型不存在,则值为0;如果存在,则值为1。每行只能有一种土壤类型

我想创建一个新列,如果Soil_Type1=1,则该列的值为S1,如果Soil_Type2=1,则该列的值为S2,等等。我可以使用蛮力操作,即每次执行每一行。有没有办法循环这个

train_raw[,16:53 := lapply(.SD, as.character), .SDcols =16:53 ]

train_raw[,Soil_Type := "" ]
train_raw[Soil_Type1 == 1, Soil_Type := "S1"]
train_raw[Soil_Type2 == 1, Soil_Type := "S2"]
train_raw[Soil_Type3 == 1, Soil_Type := "S3"]
train_raw[Soil_Type4 == 1, Soil_Type := "S4"]
编辑:

对不起,这就是你所说的可复制的例子吗

train_raw <- data.table(Soil_Type = "", 
                        Soil_Type1 = c(0,0,0,1), 
                        Soil_Type2 = c(0,0,1,0), 
                        Soil_Type3 = c(1,1,0,0))

train_raw[,Soil_Type := "" ]
train\u raw感谢您的回答

train_raw[, Soil_Type := "" ]
indx <- which(names(train_raw) == "Soil_Type")
cols <- paste0("Soil_Type", 1:4)
for(j in 1:length(cols))
   set(train_raw,which(train_raw[[cols[j]]] == 1L), 
       j = indx, value = paste0("S", j))
train_raw[,土壤类型:=“”]

indx如果没有一个可复制的例子,很难判断,但类似的东西应该可以工作
train_raw[,Soil_Type:=”;indx感谢您的回复,很抱歉没有可复制的示例。我尝试编写代码,但在for循环中,我得到了一个错误-set中的错误(train_raw,I=train_raw[[cols[j]]]==1L,j=indx,value=paste0(“S”):I是“logical”类型。必须是整数,否则数值会强制显示警告。如果I是逻辑子集,只需用which()换行,然后取which()为了提高效率,尽可能在循环之外。只需将
train_raw[[cols[j]]]==1L
更改为
which(train_raw[[cols[j]]]==1L)
set
内。这里也只有3列,而不是4列,因此将
cols
更改为
cols,非常感谢。