Я хотел бы получить помощь в моих поисках, чтобы выбрать части строки в определенных строках в r-кадре данных. Я проиллюстрировал некоторые фиктивные данные ниже (floyd), чтобы проиллюстрировать.Как выбрать шаблон строки с условиями в цикле [r]
В первой строке данных есть только 1 слово (его число да, но я обрабатываю все числа как символы/слова) для каждого столбца, но строки с 2 по 4 содержат более одного слова. Я хотел бы выбрать число в каждой строке/ячейке на основе позиции, переданной ему с помощью именованного вектора cool_floyd_position
.
# please NB need stringr installed for my solution attempt!
# some scenario data
floyd = data.frame(people = c("roger", "david", "rick", "nick"),
spec1 = c("1", "3 5 75 101", "3 65 85", "12 2"),
spec2 = c("45", "75 101 85 12", "45 65 8", "45 87"),
spec3 = c("1", "3 5 75 101", "75 98 5", "65 32"))
# tweak my data
rownames(floyd) = floyd$people
floyd$people = NULL
# ppl of interest
cool_floyd = rownames(floyd)[2:4]
# ppl string position criteria
cool_floyd_position = c(2,3,1)
names(cool_floyd_position) = c("david", "rick", "nick")
# my solution attempt
for(i in 1:length(cool_floyd))
{
select_ppl = cool_floyd[i]
string_select = cool_floyd_position[i]
floyd[row.names(floyd) == select_ppl,] = apply(floyd[row.names(floyd) == select_ppl], 1,
function(x) unlist(stringr::str_split(x, " ")[string_select]))
}
Я пытаюсь получить мою FLOYD dataframe, чтобы выглядеть следующим образом, когда выбирается второе слово для всех столбцов Давидов, третье слово для всех Рик колонн и первое слово для всех столбцов нарицательные (Роже столбцы должны просто оставаться такими, как есть)
my_target_df = data.frame(people = c("roger", "david", "rick", "nick"),
spec1 = c("1", "5", "85", "12"),
spec2 = c("45", "101", "8", "45"),
spec3 = c("1", "5", "5", "65"))
row.names(my_target_df) = my_target_df$people
my_target_df$people = NULL
Большое спасибо!
@Sotos благодарит за редактирование. Я делал редактирование в одно и то же время :-) Плюс один для вашего хорошего решения – akrun
heh ... да, я понял :) Спасибо – Sotos
Thnx @akrun. Очень признателен. Извиняюсь, что я не сделал это быстро - наступали выходные и очень быстро укусил меня в пятницу днем. :) – CallumH