我有一个类似于这个主题的问题:“在数据框中按组折叠文本[复制]”
group text
a a1
a a2
a a3
b b1
b b2
c c1
c c2
c c3
c c4
我想通过两个顺序ID(不是整个ID组)来折叠
group text
a a1a2
a a2a3
b b1b2
c c1c2
c c2c3
c c3c4
答案 0 :(得分:4)
替代tidyverse
回答:
library(tidyverse)
dat %>%
group_by(group) %>%
mutate(text=paste0(lag(text),text)) %>% slice(-1)
使用data.table
:
library(data.table)
setDT(dat)
dat[, paste0(shift(text,1), text)[-1], by=group]
# group V1
#1: a a1a2
#2: a a2a3
#3: b b1b2
#4: c c1c2
#5: c c2c3
#6: c c3c4
答案 1 :(得分:2)
这个怎么样:
sudo python draw_net.py your_net.protobuf your_net.png
或
library(tidyverse)
df %>%
group_by(group) %>%
mutate(text = c(paste0(text[1:(n()-1)],text[2:n()]),NA)) %>%
filter(!is.na(text))
df %>% group_by(group) %>% summarise(text = list(paste0(text[1:(n()-1)],text[2:n()]))) %>% unnest
上面的代码假设组长度始终大于1。如果存在单行组,则需要使用 group text
1 a a1a2
2 a a2a3
3 b b1b2
4 c c1c2
5 c c2c3
6 c c3c4
语句对其进行不同的处理。例如,如果我们添加一个group =“d”和text =“d1”的行,你可以这样做:
if
df %>% group_by(group) %>% summarise(text = if(n()==1) list(text) else list(paste0(text[1:(n()-1)],text[2:n()]))) %>% unnest
答案 2 :(得分:1)
你可以尝试:
unlist(by(df2$text,df2$group,function(x)paste0(head(x,-1),x[-1])))
a1 a2 b c1 c2 c3
"a1a2" "a2a3" "b1b2" "c1c2" "c2c3" "c3c4"
答案 3 :(得分:0)
base R
和split
stack
选项
stack(lapply(split(df1$text, df1$group), function(x) paste0(x[-length(x)], x[-1])))[2:1]