#r #dataframe
Вопрос:
MWE выглядит следующим образом: у меня есть 3 группы по 2, 4 и 3 предмета последовательно. Так что у меня есть:
library(dplyr)
Group <- c(1, 1, 2, 2, 2, 2, 3, 3, 3)
Subject_ID <- c(1, 2, 1 ,2, 3, 4, 1, 2)
df <- rbind(Group, Subject_ID)
Поскольку субъекты в разных группах являются разными субъектами, поэтому я хочу, чтобы идентификатор субъекта был уникальным для каждого субъекта в наборе данных. То, что я сделал, было следующим:
Num_Subjects <- (length(unique(filter(df, Group == 1)$Subject)),
length(unique(filter(df, Group == 2)$Subject)),
length(unique(filter(df, Group == 3)$Subject)),
)
# Then I defined a summation function to calculate how many subjects there are in all previous groups.
sumfun <- function(x,start,end){
return(sum(x[start:end]))
}
# Then I defined another function that generates a new subject ID for each subject in each group.
SubjIDFn <- function(x, i) {
x %>% filter(Session == i) %>% mutate(
Sujbect = Subject sumfun(Num_Subjects, 1, i-1)
)
}
# Then I loop this from group 2 to group 3,
for (i in 2:3) {
df.Corruption.WithoutS1 <- SubjIDFn(df.Corruption.WithoutS1, i)
}
Тогда набор данных содержит ноль наблюдений. Я не знаю, где это пошло не так, и я не знаю, как разумно решить эту проблему. Спасибо за вашу помощь!
Ответ №1:
Я думаю, ты немного переоцениваешь это… Если Subject_ID
он уникален в группах, вы можете просто пойти с:
library(dplyr)
Group <- c(1, 1, 2, 2, 2, 2, 3, 3, 3)
Subject_ID <- c(1, 2, 1 ,2, 3, 4, 1, 2, 3)
df <- bind_cols(Group=Group, Subject_ID=Subject_ID)
df %>% mutate(unique_id = paste(Group, Subject_ID, sep="."))
# A tibble: 9 x 3
Group Subject_ID unique_id
<dbl> <dbl> <chr>
1 1 1 1.1
2 1 2 1.2
3 2 1 2.1
4 2 2 2.2
5 2 3 2.3
6 2 4 2.4
7 3 1 3.1
8 3 2 3.2
9 3 3 3.3
Обратите внимание, что я использовал bind_cols
вместо rbind
того, чтобы иметь фрейм данных вместо матрицы.
Комментарии:
1. Это очень полезно! Умно! Я пытался дать каждому субъекту интегральный идентификатор, но это не обязательно. Другой вопрос, могу ли я иметь цикл for в функции mutate?
2. Я никогда не пытался использовать циклы с мутацией, и я не думаю, что это возможно. Тем не менее, я узнал из мудрости этого сообщества, что циклы почти всегда являются плохой идеей. Задайте другой вопрос и предоставьте подробную информацию о том, что вам нужно сделать.
3. Хорошо, большое спасибо! Позже я достиг своей цели с
group_by() %>% mutate()
помощью .