标签: na

将 NA 替换为 R 中前一行和后一行的值的平均值

我的 data.frame 充满了 NA。

DATE <- c("1","2","3","4","5","6","7","1","2","3","4","5","6","7")
COMP <- c("A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B")
BM <- c(12,11,NA,14,NA,15,NA, 5, 5, NA, 6, NA, 8, 9)
df <- data.frame(DATE, COMP, BM, stringsAsFactors=F)

df

#    DATE COMP BM
# 1     1    A 12
# 2     2    A 11
# 3     3    A NA
# 4     4    A 14
# 5     5    A NA
# 6     6    A 15
# 7     7    A NA
# …
Run Code Online (Sandbox Code Playgroud)

replace r dataframe na

2
推荐指数
1
解决办法
1175
查看次数

将数值向量中的 NA 替换为从邻居计算出的值

我正在尝试编写一个replacena()函数,它将给定数值向量中的每个缺失值替换为其前后元素的算术平均值

例如,如果c(5, NA, 6, 2, 3, 5, 6, 4, NA, 2, NA, 5)给定,则结果应该是c(5, 5.5, 6, 2, 3, 5, 6, 4, 3, 2, 3.5, 5)

我正在寻找一些优雅的解决方案,可能带有应用函数(没有控制流结构),但我还没有想出任何有效的解决方案。我不太确定如何访问 lambda function(x) 中的上一个和下一个元素。

replacena <- function(l)
{
   stopifnot(is.numeric(l))
   sapply(l[is.na(l)], function(x){ l[x] <- mean( c(l[-1:0], l[0:1]) ) } )
}
Run Code Online (Sandbox Code Playgroud)

函数输入:

replacena(c(5, NA, 6, 2, 3, 5, 6, 4, NA, 2, NA, 5))
Run Code Online (Sandbox Code Playgroud)

预期产出

c(5, 5.5, 6, 2, 3, 5, 6, 4, 3, 2, 3.5, 5)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

r na

2
推荐指数
1
解决办法
1700
查看次数

R 删除数据帧的第一行,直到第一行没有 NA

我正在数据框上应用 na.approx,如果 NA 恰好位于数据库的第一行或最后一行,则该方法将不起作用。

如何编写执行以下操作的函数:“当数据帧第一行的任何值为 NA 时,删除第一行”

数据框示例:

x1=x2=c(1,2,3,4,5,6,7,8,9,10,11,12)
x3=x4=c(NA,NA,3,4,5,6,NA,NA,NA,NA,11,12)
df=data.frame(x1,x2,x3,x4)
Run Code Online (Sandbox Code Playgroud)

此示例数据框的结果应如下所示:

result=df[-1:-2,]
Run Code Online (Sandbox Code Playgroud)

我当前的尝试看起来都类似于:

replace_na=function(df){
while(anyNA(df[1,])=TRUE){
  df=df[-1,],
  return(df)
}  
#this is where I would apply the na.approx function to the data frame
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,谢谢!

r function while-loop dataframe na

2
推荐指数
1
解决办法
1739
查看次数

如何使用多个其他列中的所有非 NA 值创建新列?

我想创建一个列 d,其中包含其他列中的所有非 NA 值。

我尝试了 ifelse,但无法弄清楚如何使其以正确的方式嵌套,以便也包含 c 列中的值。也许应该使用 ifelse 之外的其他内容?

这是一个“虚拟”数据框:

 a <- c(NA, NA, NA, "A", "B", "A", NA, NA)
 b <- c("D", "A", "C", NA, NA, NA, NA, NA)
 c <- c(NA, NA, NA, NA, NA, NA, "C", NA)
 data <- data.frame(a, b, c)
Run Code Online (Sandbox Code Playgroud)

我希望 d 列看起来像这样:

 data$d <- c("D", "A", "C", "A", "B", "A", "C", NA)
 View(data)
Run Code Online (Sandbox Code Playgroud)

if-statement r conditional-statements dataframe na

2
推荐指数
1
解决办法
4046
查看次数

将行中的初始 NA 值替换为零,直到非 NA 列

考虑数据集中的以下行:-

#Row (initially):
NA NA NA NA NA NA NA 2 3 1 4 5 2 NA NA 6 7
Run Code Online (Sandbox Code Playgroud)

我希望所有这些行都转换成

#Row  (modified) :
0  0  0  0  0  0  0 2 3 1 4 5 2 NA NA 6 7
Run Code Online (Sandbox Code Playgroud)

只有在任何非 NA 值之前出现的初始 NA 才会被零替换,而不是后面出现的初始 NA。

编辑:我的数据是矩阵,例如:

NA   NA   NA   NA    1    1    1    1    1     1
NA   NA   NA   NA    1    1    1    1    1     1
NA   NA   NA   NA    1    1    1    1    1     1
NA …
Run Code Online (Sandbox Code Playgroud)

r vector na

2
推荐指数
1
解决办法
243
查看次数

更改 ggplot geom_bar 中 NA 值的标签和颜色?

我有一个这样的情节:

data <- data.frame(time = c("time1", "time2", "time1"),
                   sex = c("m", "f", NA))

ggplot(data = data) +
  geom_bar(aes(x = time, y = (..count..)/sum(..count..),
               fill = sex),
           position = "fill") +
  scale_y_continuous(name = "percentation",
                     labels = scales::percent)
Run Code Online (Sandbox Code Playgroud)

我正在尝试更改 NA 值的标签和颜色。我用过scale_fill_manual像添加

  scale_fill_manual(labels = c("m" = "male",
                               "f" = "female",
                               "NA" = "unknown"),
                    values = c("m" = "blue",
                               "f" = "red",
                               "NA" = "green"))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,所以我想问一下,这里有人可以帮助我解决这个问题吗?是否有特殊的词或其他东西来选择 NA 值?另外,我想保留直接分配,而"m" = "male"不是仅仅通过编写"male"来控制分配。

r legend ggplot2 na geom-bar

2
推荐指数
1
解决办法
4721
查看次数

忽略函数中的 NA 值

我正在编写自己的函数来计算数据集中列的平均值,然后使用它来应用它,apply()但它只返回第一列的平均值。下面是我的代码:

mymean <- function(cleaned_us){
  column_total = sum(cleaned_us)
  column_length = length(cleaned_us)
  return (column_total/column_length)
}

Average_2 <- apply(numeric_clean_usnews,2,mymean,na.rm=T)
Run Code Online (Sandbox Code Playgroud)

r function na

2
推荐指数
1
解决办法
3万
查看次数

r - 替换 NA 时合并组中的行

我试图找到这个问题的答案,但找不到。如果有答案,我会道歉并立即删除我的问题。

我正在尝试将几行合并为一行(此计算应该在组上单独完成,在这种情况下id可以使用变量进行分组),以便不留下 NA 值。

# initial dataframe
df_start <- data.frame(
  id = c("as", "as", "as", "as", "as", "bs", "bs", "bs", "bs", "bs"), 
  b = c(NA, NA, NA, NA, "A", NA, NA, 6, NA, NA), 
  c = c(2, NA, NA, NA, NA, 7, NA, NA, NA, NA), 
  d = c(NA, 4, NA, NA, NA, NA, 8, NA, NA, NA), 
  e = c(NA, NA, NA, 3, NA, NA, NA, NA, "B", NA), 
  f = c(NA, NA, 5, NA, NA, NA, …
Run Code Online (Sandbox Code Playgroud)

merge row r na dplyr

2
推荐指数
1
解决办法
2028
查看次数

获取列的所有 NA 值的行号

我有数据如下:

df <- as.data.frame(c(1,2,NA,4,5))
names(df)[1] <- "first_column"

  first_column
1            1
2            2
3           NA
4            4
5            5
Run Code Online (Sandbox Code Playgroud)

我想获取 is 的所有行号first_columnNA所以3

我找到了查找其他值的方法,即which(grepl(2, df$first_column)) 但不是NA。包含NA值显然相当麻烦(链接)。有没有更简单的方法来做到这一点?

有任何想法吗?

r na grepl

2
推荐指数
1
解决办法
549
查看次数

如何处理 lmer 列中的缺失值 (NA)

我想在使用 时使​​用na.passfor 。某些列中的数据集的某些观察值存在值。我只想控制包含 的变量。非常重要的是,在控制固定效应后,数据集的大小将保持不变。我想我必须与in一起工作。我正在使用以下模型:na.actionlmerNANAna.actionlmer()

baseline_model_0 <- lmer(formula=log_life_time_income_child ~  nationality_dummy + 
    sex_dummy + region_dummy + political_position_dummy +(1|Family), data = baseline_df
Run Code Online (Sandbox Code Playgroud)

qr.default(X, tol = tol, LAPACK = FALSE) 中的错误:外部函数调用中的 NA/NaN/Inf (arg 1)

我的数据:如下所示,所有控制变量中都有相当多的 NA。所以“扔掉”所有这些观察结果是没有选择的!

一个例子:

nat_dummy
1   : 335
2   :  19
NA's: 252
Run Code Online (Sandbox Code Playgroud)

我的问题:

1.) 如何将所有控制变量(以多列表示)包含到模型中而不排除观察值(以行表示)?

2.) 如何lmer处理所有列中缺失的变量?

r lme4 na mixed-models

2
推荐指数
1
解决办法
1925
查看次数