我正在通过使用 apply 在数据帧的行上应用质数函数来索引数据帧。给定的输出应支持以任何或所有数字为素数的行。示例数据框名称c4:
c1 c2 c3
1 8 2 6
2 9 5 4
3 10 4 5
4 7 1 8
5 3 1 2
6 7 5 9
7 5 1 4
8 2 1 3
9 7 2 4
10 10 4 8
给定的输出应为
c1 c2 c3
1 8 2 6
2 9 5 4
3 10 4 5
4 7 1 8
5 3 1 2
6 7 5 9
7 5 1 4
8 2 1 3
9 7 2 4
删除第十行。 我用于素数的代码是
prime.function<-
function (x){
if(x == 2){
return(TURE)
} else if (any(x %% 2: (x - 1) == 0)){
return(FALSE)
}else{
return(TRUE)
}
}
并且我在基本索引的apply函数中使用以下函数:
c4[apply(c4, MARGIN = 1, FUN = function(x) any(prime.function(x))),]
但不幸的是,代码会引发错误。
我很想听听有关该代码的任何建议。希望我在解释方面很清楚。
答案 0 :(得分:0)
使用此处提供的prim函数:Prime number function in R
is.prime <- function(n) n == 2L || all(n %% 2L:max(2,floor(sqrt(n))) != 0)
以下代码将完成这项工作:
# replicate your data frame
c4_check <- c4
# replace the items with booleans in the replicate
c4_check[] <- sapply(unlist(c4), is.prime)
# filter the original data frame using the replicate
c4[rowSums(c4_check) != 0, ]
更新:
@Maurits Evers在评论中的回答要好得多:
c4[sapply(1:nrow(c4), is.prime), ]