【发布时间】:2017-07-07 19:29:15
【问题描述】:
我正在根据其他单元格中的值更改数据框中 df$AccPat 列中的值。起点:
AccVs Verb Acc LVs AccPat
0 2 pádsáda fa 1 u
1 1 pácccaiiidncll ma 2 u
2 0 saa un 1 u
3 0 liss un 0 u
4 1 litátoko fa 0 u
5 1 wupágaak ma 1 u
我可以结合多个因素,因此:
df[df$Acc == "fa" & df$LVs == "0",]$AccPat <- "a"
AccVs Verb Acc LVs AccPat
0 2 pádsáda fa 1 u
1 1 pácccaiiidncll ma 2 u
2 0 saa un 1 u
3 0 liss un 0 u
4 1 litátoko fa 0 a
5 1 wupágaak ma 1 u
或者我可以使用 grep 在一列中选择与正则表达式匹配的行:
df[grep("^pá", df$Verb),]$AccPat <- "p"
AccVs Verb Acc LVs AccPat
0 2 pádsáda fa 1 p
1 1 pácccaiiidncll ma 2 p
2 0 saa un 1 u
3 0 liss un 0 u
4 1 litátoko fa 0 a
5 1 wupágaak ma 1 p
但是我想同时做这两个,所以只选择匹配上面正则表达式的行,在 df$AccVs 中值为“1”。
AccVs Verb Acc LVs AccPat
0 2 pádsáda fa 1 u
1 1 pácccaiiidncll ma 2 b
2 0 saa un 1 u
3 0 liss un 0 u
4 1 litátoko fa 0 a
5 1 wupágaak ma 1 u
我曾经认为这是不可能的,但this question 让我觉得并非如此。但是,那里给出的解决方案对我不起作用。
df[grep("^pá", df$Verb) & df$AccVs == "1"]$AccPat <- "b"
导致错误“选择了未定义的列”和“较长的对象长度不是较短对象长度的倍数”,并且
df[grep("^pá", df$Verb) & df$AccVs == "1",]$AccPat <- "b"
尝试打印我的整个数据帧(比这个示例大得多),并且还会导致错误“较长的对象长度不是较短对象长度的倍数”。
注意:我要检查的许多值都是字符串,因此我需要一个适用于字符串的解决方案。我没有做任何数字,所以如果我将整数视为字符串就可以了。
【问题讨论】:
-
我确实有一个笨拙的解决方法:创建一个带有标志以匹配正则表达式的新列,然后将其用作组合的因素,但似乎没有必要这样做那个。