R 如何循环浏览每一行并删除那些;7“;已使用超过35次
我有一个包含400行和57个变量的数据集。每个变量的答案范围为1到7。现在我想删除那些使用相同数字(比如7)超过35次的行,因为在这种情况下该行无效。R 如何循环浏览每一行并删除那些;7“;已使用超过35次,r,R,我有一个包含400行和57个变量的数据集。每个变量的答案范围为1到7。现在我想删除那些使用相同数字(比如7)超过35次的行,因为在这种情况下该行无效。 我如何才能做到这一点(可能是应用或for循环函数)?您可以这样解决它 library(data.table) set.seed(123) df <- data.table(matrix(sample(x = 1:10, size = 40, replace = T), ncol = 5)) df V1 V2 V3 V4 V5 1:
我如何才能做到这一点(可能是应用或for循环函数)?您可以这样解决它
library(data.table)
set.seed(123)
df <- data.table(matrix(sample(x = 1:10, size = 40, replace = T), ncol = 5))
df
V1 V2 V3 V4 V5
1: 3 6 3 7 7
2: 8 5 1 8 8
3: 5 10 4 6 1
4: 9 5 10 6 5
5: 10 7 9 3 8
6: 1 6 7 2 3
7: 6 2 7 10 4
8: 9 9 10 10 3
rowSums(df == 10) >= 2
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE // The last row has two 10
# Delete the row
df[!rowSums(df == 10) >= 2]
V1 V2 V3 V4 V5
1: 3 6 3 7 7
2: 8 5 1 8 8
3: 5 10 4 6 1
4: 9 5 10 6 5
5: 10 7 9 3 8
6: 1 6 7 2 3
7: 6 2 7 10 4
库(data.table)
种子集(123)
df=2
[1] FALSE FALSE FALSE FALSE TRUE//最后一行有两个10
#删除该行
df[!行和(df==10)>=2]
V1 V2 V3 V4 V5
1: 3 6 3 7 7
2: 8 5 1 8 8
3: 5 10 4 6 1
4: 9 5 10 6 5
5: 10 7 9 3 8
6: 1 6 7 2 3
7: 6 2 7 10 4
使用tidyverse
方法,我们可以使用pmap
进行行计算以获得计数,然后过滤
以获得所需的行。如果愿意,可以删除末尾的counts列。请注意,我选择了少于10个7的行,因为在随机抽样中,很少有行超过35个
库(tidyverse)
#>警告:包“dplyr”是在R版本3.5.1下构建的
种子集(12345)
df%
变异(num_sevens=pmap_int(,函数(…)和(c(…)==7))%>%
过滤器(七个数<10)%>%
不可抵抗
#>#A tibble:302 x 58
#>V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
#>
#> 1 6 1 6 1 2 7 3 2 6 7 2 3
#> 2 7 4 7 6 3 5 7 6 3 5 5 5
#> 3 4 5 5 3 5 2 4 7 2 7 2 4
#> 4 2 2 1 7 2 7 3 2 3 3 6 1
#> 5 3 6 2 2 6 2 5 7 1 2 7 3
#> 6 4 2 2 2 7 3 3 7 2 6 5 4
#> 7 6 6 2 4 5 3 7 7 2 7 7 6
#> 8 7 1 2 6 6 7 3 2 6 6 7 7
#> 9 1 4 6 1 7 1 6 4 7 6 4 4
#> 10 2 6 4 2 6 4 3 5 1 3 6 7
#> # ... 还有292行,46个变量:V13,V14,
#>#V15、V16、V17、V18、V19、V20、,
#>#V21、V22、V23、V24、V25、V26、,
#>#V27、V28、V29、V30、V31、V32、,
#>#V33、V34、V35、V36、V37、V38、,
#>#V39、V40、V41、V42、V43、V44、,
#>#V45、V46、V47、V48、V49、V50、,
#>#V51、V52、V53、V54、V55、V56、,
#>五分之五十七,七分之七
由(v0.2.0)于2018-08-01创建。如果我理解正确,您可以使用循环:
## some data
Data <- matrix(nrow = 3, ncol = 57)
Data[1, ] <- c(rep(1,36),sample(1:7,57-36, replace = TRUE))
Data[2, ] <- sample(1:7,57, replace = TRUE)
Data[3, ] <- sample(1:7,57, replace = TRUE)
## variable for storing the rows that does not match the pattern (thoose to keep)
rows <- NULL
## loop
for (i in 1:nrow(Data)){
counts <- table(Data[i, ])
if(!any(counts > 35)) rows <- c(rows, i)
}
## filtered data
Data <- Data[rows, ]
##一些数据
数据会考虑添加更多关于你的问题的信息,以便人们能够更好地理解它,例如你的代码来解决这个问题。