R 如何循环浏览每一行并删除那些;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:

我有一个包含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:  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, ]
##一些数据

数据会考虑添加更多关于你的问题的信息,以便人们能够更好地理解它,例如你的代码来解决这个问题。