我有一个我似乎无法弄清楚的问题
我有这样的数据框
df <- data.frame(c(rep_len("a",3), "b", "b"), c(rep_len(55, 3), 44, 44),c(rep_len(12, 3), 6, 6), c("na", 2, "na", 3, "na"), c("na", "na", 4, "na", 8), c(5, "na", "na", "na", "na"))
names(df) <- c("street", "latitude", "longitude", "A", "B", "C")
street latitude longitude A B C
a 55 12 na na 5
a 55 12 2 na na
a 55 12 na 4 na
b 44 6 3 na na
b 44 6 na 8 na
Run Code Online (Sandbox Code Playgroud)
而我想我正在寻找的方法是在'street','latitude','longitude'中折叠具有相同值的行,因此数据框看起来像这样
street latitude longitude A B C
a 55 12 2 4 5
b 44 6 3 8 na
Run Code Online (Sandbox Code Playgroud)
我最好的尝试是这样的:
df %>%
group_by(street) %>%
summarise_each(funs(first))
Run Code Online (Sandbox Code Playgroud)
但它不太正确.有什么想法吗?
我不明白为什么你有"na"字符串--R有一个NA字符/因素.无论如何,对于你的例子,也许你正在寻找这个:
library(data.table)
dt = as.data.table(df) # or convert in place using setDT
dt[, lapply(.SD, function(x) x[x != "na"]), by = .(street, latitude, longitude)]
# street latitude longitude A B C
#1: a 55 12 2 4 5
#2: b 44 6 3 8 NA
Run Code Online (Sandbox Code Playgroud)