我正在使用动态生成的数据帧。
nock("http://www.google.com")
.get(/.*/)
上面看起来像这样:
structure(list(`4` = c(NA, NA, "Location", NA), `5` = c(NA, NA,
"Size", "W")), row.names = c(NA, 4L), class = "data.frame")
我想从数据框中的每一列中获取第一个字符变量。例如,从上表中,我想检索“位置”和“大小”并将它们用作我的列标题。
由于表是动态生成的,因此我不确定字符串变量将出现在哪一行。
答案 0 :(得分:3)
一种选择是遍历各列,并使用summarise_all
获得第一个非NA元素
library(dplyr)
df1 %>%
summarise_all(funs(.[!is.na(.)][1]))
或者对于sapply
,使用相同的逻辑
sapply(df1, function(x) x[!is.na(x)][1])
或者在逻辑矩阵(which
)上使用!is.na(df1)
,对数据进行子集处理,通过过滤出重复的列索引来获取每一列的第一个元素
ind <- which(!is.na(df1), arr.ind = TRUE)
df1[ind][!duplicated(ind[,2])]
#[1] "Location" "Size"