Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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
克服了在使用sqldf时将dataframe强制为列表的问题_R_Dataframe_Sqldf_Coercion - Fatal编程技术网

克服了在使用sqldf时将dataframe强制为列表的问题

克服了在使用sqldf时将dataframe强制为列表的问题,r,dataframe,sqldf,coercion,R,Dataframe,Sqldf,Coercion,我需要根据数据框pum中两列Var1,Var2中的值将行分为两组(Present或Not Present)。稍后将此列作为新列添加到另一个数据框中,作为data.cov.cat$PU。当值集c(1,2,3)中Var1大于0.053或Var2时,需要将行标记为存在否则不存在 下面的代码是根据以下条件开发的 data.cov.cat$PU <- sqldf("SELECT CASE WHEN Var1 >= 0.053 THEN 'Present'

我需要根据数据框
pum
中两列
Var1
Var2
中的值将行分为两组(
Present
Not Present
)。稍后将此列作为新列添加到另一个数据框中,作为
data.cov.cat$PU
。当值集
c(1,2,3)
Var1
大于
0.053
Var2
时,需要将行标记为
存在
否则
不存在

下面的代码是根据以下条件开发的

data.cov.cat$PU <- sqldf("SELECT CASE WHEN Var1 >= 0.053 THEN 'Present'  
                                   WHEN Var1 < 0.053 OR Var2 IN (1,2,3) THEN 'Present'
                                   WHEN Var1 < 0.053 OR Var2 = 0 THEN 'Not present'
                                   ELSE 'NA' 
                              END as newCol
                              FROM pum")$newCol

由于原始的data.frame已经分解了列,因此我在这里也对它们进行了转换。

data.cov.cat
在执行最后一个
sqldf
语句之前不是数据帧。当执行
sapply
时,它已更改为矩阵。可再现示例的溶液为:

data.cov.cat <- data.frame(V1 = runif(10,0,10), V12 = c("blue", "red", "yellow", "pink","blue", "red", "yellow", "pink", "red", "yellow"))

data.cov.cat <- as.data.frame(sapply(data.cov.cat, as.factor))

pum <- data.frame(Var1 = runif(10,0,1), Var2 = c(1,3,2,0,2,1,2,0,1,3))

data.cov.cat$PU <- sqldf("SELECT CASE WHEN Var1 >= 0.053 THEN 'Present'  
                                   WHEN Var1 < 0.053 OR Var2 IN (1,2,3) THEN 'Present'
                                   WHEN Var1 < 0.053 OR Var2 = 0 THEN 'Not present'
                                   ELSE 'NA' 
                              END as newCol
                              FROM pum")$newCol

data.cov.cat哪个“data.frame”转换为“list”-“pum”或“data.cov.cat”?你能提供一个重现问题的样本数据集吗?@alexis_laz我添加了一个示例,你能看一下吗。即使进行了编辑,它仍然无法重现,因为缺少
data.cov.cat
。另外,如果要使用随机数,则需要一个
set.seed
语句来使其可复制。
sqldf(…)$newCol
的输出是预期的字符向量,但根据提供的信息,我们不能说更多。@G.Grothendieck我已经添加了信息。我想将这个新的字符向量添加为现有数据帧中的一个新列。是否可能?
sapply
调用后,“data.cov.cat”被转换为“矩阵”。和
$
data.cov.cat <- data.frame(V1 = runif(10,0,10), V12 = c("blue", "red", "yellow", "pink","blue", "red", "yellow", "pink", "red", "yellow"))

data.cov.cat <- as.data.frame(sapply(data.cov.cat, as.factor))

pum <- data.frame(Var1 = runif(10,0,1), Var2 = c(1,3,2,0,2,1,2,0,1,3))

data.cov.cat$PU <- sqldf("SELECT CASE WHEN Var1 >= 0.053 THEN 'Present'  
                                   WHEN Var1 < 0.053 OR Var2 IN (1,2,3) THEN 'Present'
                                   WHEN Var1 < 0.053 OR Var2 = 0 THEN 'Not present'
                                   ELSE 'NA' 
                              END as newCol
                              FROM pum")$newCol