에서 여러 단어의 정확한 일치를 기반으로 새 열을 버리는 : 나는 일반적인 물고기 코드/이름으로 채워 열을 사용할 필요가내가 데이터 프레임이 문자열
df <- data.frame(
Otherspp = c("suck SD", "BT", "SD RS", "RSS"),
Dominantspp = c("OM", "OM", "RSS", "CH"),
Commonspp = c(" ", " ", " ", "OM"),
Rarespp = c(" ", " ", "SD", "NP"),
NP = rep("northern pikeminnow|NORTHERN PIKEMINNOW|np|NP|npm|NPM", 4),
OM = rep("steelhead|STEELHEAD|rainbow trout|RAINBOW TROUT|st|ST|rb|RB|om|OM", 4),
RSS = rep("redside shiner|REDSIDE SHINER|rs|RS|rss|RSS", 4),
suck = rep("suckers|SUCKERS|sucker|SUCKER|suck|SUCK|su|SU|ss|SS", 4)
)
을 (NP, OM, RSS, 빨아) 첫 번째 네 열의 표현식을 평가하고 표현식이 정확히 충족되면 해당 열을 기반으로 1/0을 출력합니다. 아래에있는 코드는 전체 단어 (일부만)와 일치하지 않으며 잘못된 데이터를 제공합니다 (아래에서 결과를보십시오).
df %>%
rowwise() %>%
transmute_at(vars(NP, OM, RSS, suck),
funs(case_when(
grepl(., Dominantspp) ~ "1",
grepl(., Commonspp) ~ "1",
grepl(., Rarespp) ~ "1",
grepl(., Otherspp) ~ "1",
TRUE ~ "0"))) %>%
ungroup()
결과 : 행 3에서 "suck"및 "RSS"는 모두 "1"을 수신합니다.
# A tibble: 4 x 4
NP OM RSS suck
<chr> <chr> <chr> <chr>
1 0 1 0 1
2 0 1 0 0
3 0 0 1 1
4 1 1 1 1
원하는 출력 :
NP OM RSS suck
1 0 1 0 1
2 0 1 0 0
3 0 0 1 0
4 1 1 1 0
위의 테스트 케이스에 대해 예상 한 올바른 결과를 제공 할 수 있습니까? –
분명히하기 위해 네 개의 열 (anypp, Dominantspp 등)이 정규식과 일치 할 때 해당 열에 0 또는 1을 입력 하시겠습니까? –
원하는 출력 (@StuartAllen)으로 게시물을 업데이트했습니다. 나는 그 종의 "존재"를 나타내는 1을, 결석의 경우 0을 (@David Robinson) 원합니다. – LAB