我的 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) 我正在尝试编写一个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)
有任何想法吗?
我正在数据框上应用 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)
任何帮助将不胜感激,谢谢!
我想创建一个列 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) 考虑数据集中的以下行:-
#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) 我有一个这样的情节:
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"
来控制分配。
我正在编写自己的函数来计算数据集中列的平均值,然后使用它来应用它,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) 我试图找到这个问题的答案,但找不到。如果有答案,我会道歉并立即删除我的问题。
我正在尝试将几行合并为一行(此计算应该在组上单独完成,在这种情况下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) 我有数据如下:
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_column
,NA
所以3
我找到了查找其他值的方法,即which(grepl(2, df$first_column))
但不是NA
。包含NA
值显然相当麻烦(链接)。有没有更简单的方法来做到这一点?
有任何想法吗?
我想在使用 时使用na.pass
for 。某些列中的数据集的某些观察值存在值。我只想控制包含 的变量。非常重要的是,在控制固定效应后,数据集的大小将保持不变。我想我必须与in一起工作。我正在使用以下模型:na.action
lmer
NA
NA
na.action
lmer()
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
处理所有列中缺失的变量?