R 使用多个NAs折叠长数据中的行

R 使用多个NAs折叠长数据中的行,r,dplyr,R,Dplyr,我的数据集示例有10行,而不是5行,因为NAs是一种明显的模式 将这样的数据集从10行折叠到5行的有效方法是什么 df <- structure(list(variable = c("am", "am", "carb", "carb", "cyl", "cyl", "disp", "disp", "drat", "drat"), mean_stat = c(0.40625, NA, 2.8125, NA, 6.1875, NA, 230.721875, NA, 3.5965625, N

我的数据集示例有10行,而不是5行,因为NAs是一种明显的模式

将这样的数据集从10行折叠到5行的有效方法是什么

df <- structure(list(variable = c("am", "am", "carb", "carb", "cyl", 
"cyl", "disp", "disp", "drat", "drat"), mean_stat = c(0.40625, 
NA, 2.8125, NA, 6.1875, NA, 230.721875, NA, 3.5965625, NA), sd_stat = c(NA, 
0.498990917235846, NA, 1.61519997763185, NA, 1.78592164694654, 
NA, 123.938693831382, NA, 0.534678736070971)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -10L), .Names = c("variable", 
"mean_stat", "sd_stat"))

df假设您希望为每个变量取第一个非NA值:

df%>%group\u by(变量)%>%summary\u all(~first(na.省略)())
#一个tibble:5x3
#变量平均值统计
#                  
#凌晨1点0.406250 0.4989909
#2碳水化合物2.812500 1.6152000
#3缸6.187500 1.7859216
#4显示230.721875 123.9386938
#5德拉特3.596563 0.5346787

假设要为每个变量取第一个非NA值:

df%>%group\u by(变量)%>%summary\u all(~first(na.省略)())
#一个tibble:5x3
#变量平均值统计
#                  
#凌晨1点0.406250 0.4989909
#2碳水化合物2.812500 1.6152000
#3缸6.187500 1.7859216
#4显示230.721875 123.9386938
#5德拉特3.596563 0.5346787

几乎可以肯定,您应该在上游解决这个问题。我见过这样的输出是由于错误的转置操作造成的

话虽如此,可使用tidyr软件包移除NA:

library(tidyr)

df %>%
  gather(key = "var", value = "val", mean_stat, sd_stat) %>%
  drop_na %>%
  spread(var, val)

您几乎可以肯定应该向上游解决这个问题。我见过这样的输出是由于错误的转置操作造成的

话虽如此,可使用tidyr软件包移除NA:

library(tidyr)

df %>%
  gather(key = "var", value = "val", mean_stat, sd_stat) %>%
  drop_na %>%
  spread(var, val)

谢谢你,斯坦伍德。我同意上游处理会更好,但这是数据到达的状态。谢谢@Stanwood。我同意上游处理会更好,但这是数据到达的状态。