Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在不重复的基于字符串部分匹配的数据帧中创建新列_R - Fatal编程技术网

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")