взять часть из строки без заданного шаблона c - PullRequest
1 голос
/ 20 февраля 2020

У меня есть столбец, в котором в

ячейка.1 указано «UNIV ZURICH; НЕ ОТКАЗАНО; НЕ ОТЧЕТНО; НЕ ОТНОШЕНО» cell.2 равно «UNIBG»

 s = c("UNIV ZURICH;NOTREPORTED;NOTREPORTED;NOTREPORTED", "UNIBG")
 s1 = unlist(strsplit(s, split=';', fixed=TRUE))[1]
 s1

, и я хочу получить

cell.1 UNIV ZURICH
cell.2 UNIBG

большое спасибо заранее,

Ответы [ 2 ]

1 голос
/ 20 февраля 2020
s = c("UNIV ZURICH;NOTREPORTED;NOTREPORTED;NOTREPORTED", "UNIBG")
s1 = strsplit(s, split=';')
result = data.frame(mycol = unlist(lapply(s1, function(x){x[1]})))

> result
        mycol
1 UNIV ZURICH
2       UNIBG
1 голос
/ 20 февраля 2020

Ваш подход strplit() - хорошая идея, он дает:

strsplit(s, split=';', fixed=TRUE)                                
[[1]]
[1] "UNIV ZURICH" "NOTREPORTED" "NOTREPORTED" "NOTREPORTED"

[[2]]
[1] "UNIBG"

Чтобы получить то, что вы ищете, вам нужно извлечь первый элемент каждого элемента списка, который вы получили а затем объединить их, вот способ сделать это (кстати, fixed=TRUE теперь требуется для этого примера).

s1 <- unlist(lapply(strsplit(s, split=';', fixed=TRUE), `[`, 1))

Ранее вы объединяли все элементы в один список:

unlist(strsplit(s, split=';', fixed=TRUE))                        
[1] "UNIV ZURICH" "NOTREPORTED" "NOTREPORTED" "NOTREPORTED"
[5] "UNIBG"      

, а затем вы брали первый элемент этого вектора.

...