我有一个数据帧列表。每个都有一个ID列,然后是许多数字列(带有列名)。
我想将所有数字列的所有1替换为0,但将ID列保持不变。我可以使用
在单个数据帧中部分完成此操作 df[,-1] <- 0
但是当我尝试将其嵌入lapply时,它失败了:
df2 <- lapply(df, function(x) {x[,-1] <- 0})
我曾尝试使用子集ifelse进行变异,但是在这种简单的替换中苦苦挣扎。可以从头开始重新创建数据帧,或者在末尾重新组合ID列,但这使我印象深刻,因为这应该很容易...
测试列表:
test_list <- list(data.frame("ID"=letters[1:3], "col2"=1:3, "col3"=0:2), data.frame("ID"=letters[4:6], "col2"=4:6, "col3"=0:2))
最终结果应该是:
final_list <- list(data.frame("ID"=letters[1:3], "col2"=0, "col3"=0), data.frame("ID"=letters[4:6], "col2"=0, "col3"=0))
答案 0 :(得分:2)
将return(x)
添加到您的函数中,然后它将正常工作。
lapply(test_list, function(x){
x[, -1] <- 0
return(x)
})
# [[1]]
# ID col2 col3
# 1 a 0 0
# 2 b 0 0
# 3 c 0 0
#
# [[2]]
# ID col2 col3
# 1 d 0 0
# 2 e 0 0
# 3 f 0 0
答案 1 :(得分:2)
您的问题的措词有点奇怪,因为听起来您想将所有的1替换为0,但是您的示例似乎与此矛盾。
如果要将1替换为0,可以这样操作:
DECLARE @searchFor INT = 10490;
SELECT code = s1.item, s2.item
FROM dbo.DelimitedSplit8K(@code,',') s1
JOIN dbo.DelimitedSplit8K(@value,'~') s2 ON s2.ItemNumber = s1.ItemNumber-1
WHERE s1.Item = @searchFor;