R 此搜索和返回问题有问题
我正在研究这个问题,我在Excel中通过匹配函数和if/isnumber混合公式找到了解决方案,并通过if语句找到了Alteryx,但我在找到解决方案时遇到了困难 Excel示例:R 此搜索和返回问题有问题,r,R,我正在研究这个问题,我在Excel中通过匹配函数和if/isnumber混合公式找到了解决方案,并通过if语句找到了Alteryx,但我在找到解决方案时遇到了困难 Excel示例:=IF(ISNUMBER(搜索(C$1,$B2)),1,0) 本质上,问题是如果audid行1(“ab1”)包含“abc”,则列abc单元格行1应接收1(如果不是0)。现在,列可以扩展到1000种可能性,因此代码必须灵活地通过更改列名来运行 当前 | sid | audid | abc | abcd
=IF(ISNUMBER(搜索(C$1,$B2)),1,0)
本质上,问题是如果audid行1(“ab1”)包含“abc”,则列abc单元格行1应接收1(如果不是0)。现在,列可以扩展到1000种可能性,因此代码必须灵活地通过更改列名来运行
当前
| sid | audid | abc | abcd | abcde |
|-----|----------------|-----|------|-------|
| ab1 | abc,abcd,abcde | NA | NA | NA |
| ab2 | abcd | NA | NA | NA |
| ab3 | abcd,abc | NA | NA | NA |
| ab4 | abcde | NA | NA | NA |
渴望的
| sid | audid | abc | abcd | abcde |
|-----|----------------|-----|------|-------|
| ab1 | abc,abcd,abcde | 1 | 1 | 1 |
| ab2 | abcd | 0 | 1 | 0 |
| ab3 | abcd,abc | 1 | 1 | 0 |
| ab4 | abcde | 0 | 0 | 1 |
任何建议或暗示都会很棒。提前谢谢你 这主要是重塑为宽格式的问题,但首先需要重新排列和分隔逗号分隔的字符串。在tidyverse语法中
库(tidyverse)
df%
变异(audid2=audid,#复制以避免删除原始
n=1)%>%#添加现有值的列以扩展为宽格式
分隔行(audid2)%>%#将逗号分隔的字符串分隔为长格式
扩展(audid2,n,fill=0)#重塑为宽形状
#>#A tibble:4 x 5
#>sid audid abc abc abc abc abc abc abc abc
#>
#>1 ab1 abc,abc,abcde 1
#>2 ab2 abcd 0 1 0
#>3 ab3 abc,abc 1 10
#>4 ab4 abcde 0 1
这里有一个选项使用qdapTools
library(qdapTools)
cbind(df1, mtabulate(strsplit(df1$audid, ",")))
# sid audid abc abcd abcde
#1 ab1 abc,abcd,abcde 1 1 1
#2 ab2 abcd 0 1 0
#3 ab3 abcd,abc 1 1 0
#4 ab4 abcde 0 0 1
如果您想坚持使用基本R,那么嵌套lappy或for循环将有所帮助
df <- data.frame(audit = c("abc,abcd,abcde", "abcd", "abc", "abcde"))
# audit
# 1 abc,abcd,abcde
# 2 abcd
# 3 abc
# 4 abcde
audits <- strsplit(df$audit, ",")
for (row in 1:length(audits)) {
for (audit in audits[[row]]) {
df[row, audit] <- 1
}
}
df[is.na(df)] <- 0
# audit abc abcd abcde
# 1 abc,abcd,abcde 1 1 1
# 2 abcd 0 1 0
# 3 abc 1 0 0
# 4 abcde 0 0 1
df