R 在不重复的基于字符串部分匹配的数据帧中创建新列
我有一个数据框,有两列R 在不重复的基于字符串部分匹配的数据帧中创建新列,r,R,我有一个数据框,有两列GL和GLDESC,我想根据列GLDESC中的一些数据添加一个名为KIND的第三列 DF: 对于数据表的每一行: 如果GLDESC在字符串中的任何位置包含单词Payroll,则我希望KIND为Payroll 如果GLDESC在字符串中的任意位置包含单词Supply,则我希望KIND为Supply 在所有其他情况下,我希望KIND成为other 然后,我发现: DF$KIND如果需要将重复元素设置为NA,请使用'GLDESC'上的duplicated获取逻辑向量,并将使用
GL
和GLDESC
,我想根据列GLDESC
中的一些数据添加一个名为KIND
的第三列
DF:
对于数据表的每一行:
- 如果
在字符串中的任何位置包含单词GLDESC
,则我希望Payroll
为KIND
Payroll
- 如果GLDESC在字符串中的任意位置包含单词
,则我希望Supply
为KIND
Supply
- 在所有其他情况下,我希望
成为KIND
other
DF$KIND如果需要将重复元素设置为NA
,请使用'GLDESC'上的duplicated
获取逻辑向量,并将使用ifelse
创建的'KIND'中的元素分配给NA
DF$KIND[duplicated(DF$GLDESC)] <- NA_character_
数据
DF1您能显示预期的输出吗您只需要一个是什么意思?另一个怎么办?该行已从数据框中删除?@Akrun刚刚删除了@冰淇淋我可以放一个样品输出。我想我能更好地展示我想要的。@akrun惊人!谢谢!说真的,你救了我!
GL GLDESC KIND
A Supply1 Supply
A Supply2 N/A
A Supply3 N/A
A Supply4 N/A
A Supply5 N/A
A Supply6 N/A
A Payroll1 Payroll
B Supply2 Supply
B Payroll Payroll
DF$KIND[duplicated(DF$GLDESC)] <- NA_character_
library(dplyr)
DF %>%
group_by(GL) %>%
mutate(KIND = replace(KIND, duplicated(KIND) & KIND == "Supply", NA_character_))
# A tibble: 9 x 3
# Groups: GL [2]
# GL GLDESC KIND
# <chr> <chr> <chr>
#1 A Supply1 Supply
#2 A Supply2 <NA>
#3 A Supply3 <NA>
#4 A Supply4 <NA>
#5 A Supply5 <NA>
#6 A Supply6 <NA>
#7 A Payroll1 Payroll
#8 B Supply2 Supply
#9 B Payroll Payroll
DF1 %>%
mutate(KIND = str_remove(GLDESC, "\\d+"),
KIND = replace(KIND, !KIND %in% c("Supply", "Payroll"), "Othere")) %>%
group_by(GL) %>%
mutate(KIND = replace(KIND, duplicated(KIND) & KIND == "Supply", NA_character_))
DF1 <- structure(list(GL = c("A", "A", "A", "A", "A", "A", "A", "B",
"B"), GLDESC = c("Supply1", "Supply2", "Supply3", "Supply4",
"Supply5", "Supply6", "Payroll1", "Supply2", "Payroll")), row.names = c(NA,
-9L), class = "data.frame")