Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于R中的循环列_R_For Loop_Dataframe - Fatal编程技术网

对于R中的循环列

对于R中的循环列,r,for-loop,dataframe,R,For Loop,Dataframe,我想在dataframe中迭代列,如果NAs的数量大于所有条目的50%,我想从dataframe中删除该列。到目前为止,我有类似的东西,但不起作用: for (i in names(df_r)) { if (sum(is.na(df_r[,i]))/length(df_r) > 0.5) { df_r <- df_r[, -i] } } for(i在名称中(df_r)){ if(总和(is.na(df_r[,i]))/长度(df_r)

我想在dataframe中迭代列,如果NAs的数量大于所有条目的50%,我想从dataframe中删除该列。到目前为止,我有类似的东西,但不起作用:

for (i in names(df_r)) {
    if (sum(is.na(df_r[,i]))/length(df_r) > 0.5) {
        df_r <- df_r[, -i]
        }
    }
for(i在名称中(df_r)){
if(总和(is.na(df_r[,i]))/长度(df_r)>0.5){

df_r对于
循环,你最好使用更多基于向量的计算,而不是更多的文本

na50 <- sapply(df_r, function(x) sum(is.na(x))) / nrow(df_r)
df_r[na50 > 0.5] <- NULL
# or
df_r <- df_r[na50 <= 0.5]

na50 0.5]你最好使用更多的基于向量的计算,而
for
循环则使用更多的文本

na50 <- sapply(df_r, function(x) sum(is.na(x))) / nrow(df_r)
df_r[na50 > 0.5] <- NULL
# or
df_r <- df_r[na50 <= 0.5]
na50 0.5]检查以下内容:

## for loop solution
for(i in names(dt))
{
    len <- nrow(dt)
    if(sum(is.na(dt[[i]])) > (len/2)) dt[[i]] <- NULL
    else next
}

## non for loop solution
cols <- colSums(is.na(dt))
cols <- names(cols[cols > (nrow(dt)/2)])
dt[[cols]] <- NULL
循环解决方案的
##
(i)名称(dt))
{
len(len/2))dt[[i]]检查此项:

## for loop solution
for(i in names(dt))
{
    len <- nrow(dt)
    if(sum(is.na(dt[[i]])) > (len/2)) dt[[i]] <- NULL
    else next
}

## non for loop solution
cols <- colSums(is.na(dt))
cols <- names(cols[cols > (nrow(dt)/2)])
dt[[cols]] <- NULL
循环解决方案的
##
(i)名称(dt))
{

len(len/2))dt[[i]]我将使用
lappy
在data.frame列上循环:

DF <- data.frame(x = c(1, NA, 2), y = c("a", NA, NA))
DF[] <- lapply(DF, function(x) if (mean(is.na(x)) <= 0.5) x else NULL)
#   x
#1  1
#2 NA
#3  2

DF我将使用
lappy
在data.frame列上循环:

DF <- data.frame(x = c(1, NA, 2), y = c("a", NA, NA))
DF[] <- lapply(DF, function(x) if (mean(is.na(x)) <= 0.5) x else NULL)
#   x
#1  1
#2 NA
#3  2

DF基本上是一行:

df_r <- df_r[, apply(df_r, MARGIN = 2, FUN = function(x) sum(is.na(x))/length(x) <= 0.5)]

df_r基本上是一行:

df_r <- df_r[, apply(df_r, MARGIN = 2, FUN = function(x) sum(is.na(x))/length(x) <= 0.5)]

df_rr中的循环通常不是很快,应该避免。在这种情况下,可以使用
dplyr
使其快速整洁:

library(dplyr)

df_r %>% 
  select_if(function(x) { ! sum(is.na(x)) / length(x) > 0.5 })

R中的For循环通常不是很快,应该避免。在这种情况下,可以使用
dplyr
使其快速整洁:

library(dplyr)

df_r %>% 
  select_if(function(x) { ! sum(is.na(x)) / length(x) > 0.5 })

just
df_r[colMeans(is.na(df_r))<0.5]
另外:请看如何给出a;这使其他人更容易回答just
df_r[colMeans(is.na(df_r))<0.5]
另外:请看如何给出a;这使其他人更容易回答我将您的解决方案修改为:na-Hmm我将您的解决方案修改为:na