gpt4 book ai didi

r - 按组合并行,每行具有不同的 NA

转载 作者:行者123 更新时间:2023-12-01 23:03:28 25 4
gpt4 key购买 nike

我找不到这个问题的确切答案,所以我希望我没有重复问题。

我有一个数据框如下

groupid  col1  col2  col3  col4
1 0 n NA 2
1 NA NA 2 2

我想借此传达的是,存在重复的 ID,其中总信息分布在两行中,我想将这些行合并以将所有信息合并到一行中。我该怎么做?

我尝试使用 group_by 并粘贴,但这最终使数据变得更加困惑(例如,在 col4 中获得 22 而不是 2)并且 sum() 不起作用,因为某些列是字符串而那些不是分类变量并将它们相加会改变信息。

我可以做些什么来折叠行并在填写 NA 时保持一致的数据不变?

编辑:

抱歉,所需的输出如下:
groupid  col1  col2  col3  col4
1 0 n 2 2

最佳答案

这是你想要的吗 ? zoo + dplyr还要检查 link这里

df %>%
group_by(groupid) %>%
mutate_all(funs(na.locf(., na.rm = FALSE, fromLast = FALSE)))%>%filter(row_number()==n())


# A tibble: 1 x 5
# Groups: groupid [1]
groupid col1 col2 col3 col4
<int> <int> <chr> <int> <int>
1 1 0 n 2 2

编辑1

没有过滤器,将返回整个数据帧。
    df %>%
group_by(groupid) %>%
mutate_all(funs(na.locf(., na.rm = FALSE, fromLast = FALSE)))

# A tibble: 2 x 5
# Groups: groupid [1]
groupid col1 col2 col3 col4
<int> <int> <chr> <int> <int>
1 1 0 n NA 2
2 1 0 n 2 2
filter在这里,只切最后一个, na.locf将继续以前的不是 NA值,这意味着您组中的最后一行是您想要的。

也基于@thelatemail 推荐。您可以执行以下操作,返回相同的答案。
df %>% group_by(groupid) %>% summarise_all(funs(.[!is.na(.)][1]))

编辑2

假设你有冲突并且你想把它们都展示出来。
df <- read.table(text="groupid  col1  col2  col3  col4
1 0 n NA 2
1 1 NA 2 2",
header=TRUE,stringsAsFactors=FALSE)
df
groupid col1 col2 col3 col4
1 1 0 n NA 2
2 1 1(#)<NA> 2 2(#)
df %>%
group_by(groupid) %>%
summarise_all(funs(toString(unique(na.omit(.)))))#unique for duplicated like col4
groupid col1 col2 col3 col4
<int> <chr> <chr> <chr> <chr>
1 1 0, 1 n 2 2

关于r - 按组合并行,每行具有不同的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45201654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com