gpt4 book ai didi

r - 如何比较数据框中的列表

转载 作者:行者123 更新时间:2023-12-04 11:13:47 25 4
gpt4 key购买 nike

我有一个数据框如下:

输入

one<-c("Rainy and sunny;thundering;lightning","dismal and dreary;thundering")
two<-c("Overcast;lightning","Overcast;dismal and dreary")
df2<-data.frame(one,two)

我想按行比较列表中的字符串并提取新列中相同的和不同的

我期待的输出是:
same<-c("lightning","dismal and dreary")
different_Incol1ButNot2<-c("Rainy and sunny;thundering","thundering")
different_Incol2ButNot1<-c("Overcast","Overcast")

df2<-data.frame(one,two,same,different_Incol1ButNot2,different_Incol2ButNot1,stringsAsFactors=F)

应该输出:
    one                                  two                        same               different_Incol1ButNot2  different_Incol2ButNot1
Rainy and sunny;thundering;lightning Overcast;lightning lightning Rainy and sunny;thundering Overcast
dismal and dreary;thundering Overcast;dismal and dreary dismal and dreary thundering Overcast

所以我的第一个想法是拆分并列出每个字符串:
df3$one<-as.list(strsplit(df3$one, ";"))
df3$two<-as.list(strsplit(df3$two, ";"))

但是现在我不知道如何逐行比较我在数据框中创建的列表,所以我想问题是我如何在数据框中的字符串列表之间进行这些逐行比较,或者是否有更简单的方法来做到这一点?

最佳答案

这是一个想法,来自 dplyr ,

library(dplyr)

df %>%
mutate_all(funs(strsplit(as.character(.), ';'))) %>%
rowwise() %>%
mutate(same = toString(intersect(one, two)),
differs_1 = toString(setdiff(one, two)),
differs_2 = setdiff(two, one))

这使,

Source: local data frame [2 x 5]
Groups: <by row>

# A tibble: 2 x 5
one two same differs_1 differs_2
<list> <list> <chr> <chr> <chr>
1 <chr [3]> <chr [2]> lightning Rainy and sunny, thundering Overcast
2 <chr [2]> <chr [2]> dismal and dreary thundering Overcast

关于r - 如何比较数据框中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524980/

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