小编Sta*_*bre的帖子

通过匹配至少两列中的一列来合并数据帧

我一直在寻找解决方案并进行试验,但我似乎无法执行我应该做的简单任务。

我有两个数据框的格式类似于下面的玩具示例

DF1 = data.frame(A=c("cats","dogs",NA,"dogs"), B=c("kittens","puppies","kittens",NA), C=c(88,99,101,110))

    A       B           C
1   cats    kittens     88
2   dogs    puppies     99
3   NA      kittens     101
4   dogs    NA          110


DF2 = data.frame(D=c(1,2), A=c("cats","dogs"), B=c("kittens","puppies"))

    D   A       B
1   1   cats    kittens
2   2   dogs    puppies
Run Code Online (Sandbox Code Playgroud)

我希望合并两个数据集,这样输出是:

      A     B         C     D
1   cats    kittens   88    1
2   dogs    puppies   99    2
3   dogs    NA        110   2
4     NA    kittens   101   1
Run Code Online (Sandbox Code Playgroud)

换句话说,任何带有标签 A=="cats" 或 B=="kittens" 的行将被映射到 D 列中的 1,任何带有 A=="dogs" 或 B=="puppies" 的行将被映射到 2。 …

merge r

5
推荐指数
1
解决办法
940
查看次数

与grep和正则表达式匹配的部分字符串

我有一个三个字符串的向量,我正在尝试编写一个命令,它将找到向量的哪些成员具有特定字母作为第二个字符.

举个例子,假设我有这个三字母蜇的向量...

example = c("AWA","WOO","AZW","WWP")
Run Code Online (Sandbox Code Playgroud)

我可以使用grepl和glob2rx来查找W作为第一个或最后一个字符的字符串.

> grepl(glob2rx("W*"),example)
[1] FALSE  TRUE FALSE  TRUE

> grepl(glob2rx("*W"),example)
[1] FALSE FALSE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用它时,我得不到正确的结果 glob2rx(*W*)

> grepl(glob2rx("*W*"),example)
[1] TRUE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)

我确信我对正则表达式的理解是缺乏的,但这似乎是一个非常简单的问题,我似乎无法找到解决方案.我真的很喜欢一些帮助!

为了将来参考,我也非常想知道我是否可以扩展到我有更长字符串的情况.假设我有5个字符长的字符串,我可以使用grepl以这种方式返回W是第三个字符的字符串吗?

regex string grep r

5
推荐指数
1
解决办法
3199
查看次数

标签 统计

r ×2

grep ×1

merge ×1

regex ×1

string ×1