首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R数据表中将2行拆分并创建为1行

在R数据表中将2行拆分并创建为1行
EN

Stack Overflow用户
提问于 2020-05-08 12:12:21
回答 4查看 163关注 0票数 2

我在R中有这样的数据集(dt):

代码语言:javascript
复制
n       id      val
1       1&&2    10
2       3       20
3       4&&5    30

我想得到的是

代码语言:javascript
复制
n       id      val
1       1       10
2       2       10
3       3       20
4       4       30
5       5       30

我知道要拆分I,我需要这样做:id_split <- strsplit(dt$id,"&&")

但是,如何使用相同的val为最初放在一行中的in创建新行呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-05-08 12:26:33

您可以cbind拆分获得一个列,您可以再次cbindval (回收)。

代码语言:javascript
复制
res <- do.call(rbind, Map(data.frame, id=lapply(strsplit(dat$id, "&&"), cbind), 
                          val=dat$val))
res <- cbind(n=1:nrow(res), res)
res
#   n id val
# 1 1  1  10
# 2 2  2  10
# 3 3  3  20
# 4 4  4  30
# 5 5  5  30
票数 2
EN

Stack Overflow用户

发布于 2020-05-08 12:30:17

您可以使用来自lengths拆分的id并展开您的行。然后将n设置为数据帧长度的序列,即

代码语言:javascript
复制
l1 <- strsplit(as.character(df$id), '&&')
res_df <- transform(df[rep(seq_len(nrow(df)), lengths(l1)),], 
                    id = unlist(l1), 
                    n = seq_along(unlist(l1)))

这给了,

n id val 1 1 1 10 1.1 2 2 10 2 3 3 20 3 4 4 30 3.1 5 5 30

可以使用rownames(res_df) <- NULL删除行名。

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 12:37:14

如果有人想要找到整洁的解决方案,

代码语言:javascript
复制
dt %>%
  separate(id, into = paste0("id", 1:2),sep = "&&") %>% 
  pivot_longer(cols = c(id1,id2), names_to = "id_name", values_to = "id") %>% 
  drop_na(id) %>% 
  select(n, id, val)

输出为

代码语言:javascript
复制
# A tibble: 5 x 3
      n id      val
  <dbl> <chr> <dbl>
1     1 1        10
2     1 2        10
3     2 3        20
4     3 4        30
5     3 5        30

编辑:是由@sotos推荐的,我完全错过了。一种线性解

代码语言:javascript
复制
d %>% separate_rows(id, ,sep = "&&")

提供相同的输出

代码语言:javascript
复制
# A tibble: 5 x 3
      n id      val
  <dbl> <chr> <dbl>
1     1 1        10
2     1 2        10
3     2 3        20
4     3 4        30
5     3 5        30
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61678890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档