如何解决用分号将两列分隔为行R
所以,我有两列,每列中都有多个项目。它们之间用分号隔开。
我想将它们分成多行,新行根据原始行的顺序进行匹配。
如果我只有一列,我会使用separate_rows
,但是我不知道如何处理需要匹配的两列。用一个例子更容易解释:
可复制的示例:
AU <- c("Ali,PB; Naylor,JC","Warren,EW; Stephens,D")
EM <- c("PatAllen@fake.com; JNaylor@fake.edu","LizWarren@fake.edu.au; Doug@fake.net")
question <- data.frame(AU,EM)
我希望数据框是这样:
1 Ali,PB PatAllen@fake.com
2 Naylor,JC JNaylor@fke.edu
3 Warren,EW LizWarren@fake.edu.au
4 Stephens,D Doug@fake.net
解决方法
tidyr
包来解救! separate_rows()
是一个新的(?)函数,完全可以实现您想要的功能。
tidyr::separate_rows(question,AU,EM,sep = ";",convert = T)
,
如果您不想使用Ben的漂亮tidyverse公式,并且如果您的数据始终在同一位置匹配名称和电子邮件,则也可以使用for循环
Python 3.8.2+ (heads/3.8:686d508,Mar 26 2020,09:32:57)
[Clang 11.0.3 (clang-1103.0.32.29)] on darwin
Type "help","copyright","credits" or "license" for more information.
>>> import re
>>> matrix = "[[13,2,99][-2,3,13][1,0][7,77,777]]"
>>> regex = re.compile(r"\[(-?[0-9]+,)+-?[0-9]+]")
>>> re.findall(regex,matrix)
['2,','3,'77,']
>>> regex = re.compile(r"\[(?:-?[0-9]+,matrix)
['[13,99]','[-2,13]','[1,0]','[7,777]']
或者如果您需要更快地使它矢量化:
AU <- c("Ali,PB; Naylor,JC","Warren,EW; Stephens,D")
EM <- c("PatAllen@fake.com; JNaylor@fake.edu","LizWarren@fake.edu.au; Doug@fake.net")
question <- data.frame(AU,stringsAsFactors = FALSE)
df <- data.frame(name=c(),email=c())
for(r in 1:nrow(question)){
a <- strsplit(question[r,1],"; ")[[1]]
e <- strsplit(question[r,2],"; ")[[1]]
df <- rbind(df,data.frame(name=a,email=e))
}
df
另外,请注意要用“;”而不是“;”分隔,因为数据中每个单元格的第二部分都是由空格字符组成的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。