克服了在使用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