gpt4 book ai didi

r - 对数据框中的每个值在 R 中的 apply 中使用 if 语句

转载 作者:行者123 更新时间:2023-12-04 10:42:51 27 4
gpt4 key购买 nike

我有一个使用 read_excel 创建的数据框功能,然后复制它。我将像使用 Excel 一样解释它,因为在 Excel 中执行此操作非常容易。我想检查第 3 到 11 列中每一行中的每个单元格是否有一个零,如果有,在第 12 到 20 列中放置一个零。如果没有,保持原始值。

Data2 <- Data1

Data2[,12:20] <- apply(Data1[,3:11],1:2,function(x) {if(x==0) {0})

这是我收到的错误消息:

Warning message: In [<-.data.frame(*tmp*, , 12:20, value = list(0, 0, 0, 0, 0, : provided 450 variables to replace 9 variables



例子:
Data1 <- matrix(data=c(0,1,1,0,3,4,5,6,2,3,0,5,6,5,6,2,6,2,3,4,5,6,5,6),nrow=6,ncol=4)
Data2 <- Data1
Data2[,3:4] <- apply(Data1[,1:2],1:2,function(x) if(x==0) {0})
Data2 <- matrix(Data2,nrow=6,ncol=4)

结果应如下所示:
     [,1] [,2] [,3] [,4]
[1,] 0 5 0 3
[2,] 1 6 5 4
[3,] 1 2 6 5
[4,] 0 3 0 6
[5,] 3 0 6 0
[6,] 4 5 2 6

其中第 1 列和第 2 列中的任何零变为第 3 列和第 4 列中适当位置的零。

相反,我得到了这个:
     [,1] [,2] [,3] [,4]
[1,] 0 5 0 NULL
[2,] 1 6 NULL NULL
[3,] 1 2 NULL NULL
[4,] 0 3 0 NULL
[5,] 3 0 NULL 0
[6,] 4 5 NULL NULL

此外,我仍然从开头显示的 50 多行和 20 列的原始数据中收到相同的错误消息。

最佳答案

可能有一个更优雅的解决方案,但这有效:

for (j in seq(nrow(Data1))) {

for (i in seq(2)) {

if (Data1[j,i] == 0) {

Data1[j,i + 2] <- 0

}
}
}

结果:
> Data1
[,1] [,2] [,3] [,4]
[1,] 0 5 0 3
[2,] 1 6 5 4
[3,] 1 2 6 5
[4,] 0 3 0 6
[5,] 3 0 6 0
[6,] 4 5 2 6

显然,您需要调整 i in seq(2) 中的 2和 Data[j,i + 2] <- 0以适合您正在迭代的正确数量的列。

关于r - 对数据框中的每个值在 R 中的 apply 中使用 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com