我有这样的df1:
Date <-c("12/10/17","12/11/17","12/12/17","12/13/17","12/14/17","12/15/17","12/16/17")
Ben <- c(1294,NA,8959,2345,NA,0303,NA)
James <- c(NA,4523,3246,NA,NA,NA,NA)
Alex <- c(3754,1122,5582,NA,2910,NA,NA)
df1 <- data.frame(Date,Ben,James,Alex)`
#df1
Date Ben James Alex
12/10/17 1294 NA 3754
12/11/17 NA 4523 1122
12/12/17 8959 3246 5582
12/13/17 2345 NA NA
12/14/17 NA NA 2910
12/15/17 0303 NA NA
12/16/17 NA NA NA
我想获得一个列表,该列表从每列中获取最后3个非NA值并保持其列。如果列中的非NA值少于3个,则会列出其中的值,因此列的长度可能不等:
Ben James Alex
8959 4523 1122
2345 3246 5582
0303 2910
这将获得最后3个,但将它们全部放在一个未分类的向量中:
c(sapply(df[-1], function(x) sprintf("%s", tail(x[!is.na(x)], 3))))
答案 0 :(得分:0)
不确定我明白你的意思&#34;将它们全部放在一个未分类的矢量&#34; 中。这不是你想要的吗?
lapply(df1[-1], function(x) tail(x[!is.na(x)], n = 3))
#$Ben
#[1] 8959 2345 303
#
#$James
#[1] 4523 3246
#
#$Alex
#[1] 1122 5582 2910
答案 1 :(得分:0)
temp = c(sapply(df1[-1], function(x) sprintf("%s", tail(x[!is.na(x)], 3))))
out = as.data.frame(t(plyr::rbind.fill.matrix(lapply(temp, t))))
colnames(out) = colnames(df1[-1])
答案 2 :(得分:0)
你的意思是你想在一个载体中使用它们吗?
Date <-c("12/10/17","12/11/17","12/12/17","12/13/17","12/14/17","12/15/17","12/16/17")
Ben <- c(1294,NA,8959,2345,NA,0303,NA)
James <- c(NA,4523,3246,NA,NA,NA,NA)
Alex <- c(3754,1122,5582,NA,2910,NA,NA)
df1 <- data.frame(Date,Ben,James,Alex)
library(purrr)
library(dplyr)
df1 %>%
select(-Date) %>%
map(~tail(na.omit(.x), 3)) %>%
flatten_dbl()
可生产
[1] 8959 2345 303 4523 3246 1122 5582 2910