Свертывание строк с использованием двух векторов в качестве индикаторов - PullRequest
0 голосов
/ 19 февраля 2020

Это мой первый пост; пожалуйста, дайте мне знать, если я делаю какие-либо ошибки новичка. В моем конкретном случае c у меня есть вектор строк, и я хочу свернуть несколько соседних строк. У меня есть один вектор, указывающий начальную позицию и один, указывающий последний элемент. Как я могу это сделать?

Вот пример кода и мой подход, который не работает:

text <- c("cat", "dog", "house", "mouse", "street")
x <- c(1,3)
y <- c(2,5)
result <- as.data.frame(paste(text[x:y],sep = " ",collapse = ""))

В случае, если неясно, желаемый результат - это фрейм данных, состоящий из двух строк: "cat dog "и" улица домовая мышь ".

Ответы [ 4 ]

2 голосов
/ 19 февраля 2020

Не уверен, что это лучший вариант, но он делает свою работу,

sapply(mapply(seq, x, y), function(i)paste(text[i], collapse = ' '))
#[1] "cat dog"            "house mouse street"
2 голосов
/ 19 февраля 2020

Либо используйте base R с

mapply(function(.x,.y) paste(text[.x:.y],collapse = " "), x, y)

, либо используйте пакет purrr как

map2_chr(x,y, ~ paste(text[.x:.y],collapse = " "))

Оба дают

# [1] "cat dog"            "house mouse street"

Выход как фрейм данных зависит от желаемой структуры: строки или столбцы

1 голос
/ 19 февраля 2020

Я думаю, что вы хотите

result <- data.frame(combined = c(paste(text[x[1]:y[1]], collapse = " "), 
                                  paste(text[x[2]:y[2]], collapse = " ")))

Что дает вам

result
#>             combined
#> 1            cat dog
#> 2 house mouse street
0 голосов
/ 19 февраля 2020

Другое базовое решение R, использующее parse + eval

result <- data.frame(new = sapply(paste0(x,":",y),function(v) paste0(text[eval(parse(text = v))],collapse = " ")),
                     row.names = NULL)

, такое что

> result
                 new
1            cat dog
2 house mouse street
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...