根据另一个字符列为列赋值

Assign value to column based on another character column

我有一个如下所示的数据框:

    df <- data.frame(subject = c(a1_1, a1_1, a1_1, a1_1, a1_2, a1_2, b1_1, b1_1),
 group = c(1, NA, NA, NA, NA, 1, NA, NA, 2, NA)

如您所见,只有每个 subject 的第一个条目分配了 group。我的想法是用 group 数字填充每个 subject 的空白区域(例如,所有 a1_1 必须有第 1 组值)。

感谢您的帮助!

如果您的数据始终采用相同的结构,您可以从主题信息中提取组分配:

library(stringr)
df <- data.frame(subject = c(rep('a1_1', 4), rep('a1_2', 2), rep('b1_1',4)))
df$group <- str_sub(df$subject, -1)

str_sub 提取字符的最后一个元素以分配给组,假设它是您想要的最后一个字符。

我们可以

df$group <- match(df$subject, unique(df$subject))

-输出

> df
   subject group
1     a1_1     1
2     a1_1     1
3     a1_1     1
4     a1_1     1
5     a1_2     2
6     a1_2     2
7     b1_1     3
8     b1_1     3
9     b1_1     3
10    b1_1     3

数据

df <- structure(list(subject = c("a1_1", "a1_1", "a1_1", "a1_1", "a1_2", 
"a1_2", "b1_1", "b1_1", "b1_1", "b1_1")), class = "data.frame", row.names = c(NA, 
-10L))