【发布时间】:2018-08-12 15:46:04
【问题描述】:
我有一个数据集,其中包含人员 ID(人员)列表、每个人使用的一些语言特征,以及他们使用这些特征的次数。它看起来像这样:
df <- data.frame(PID = c(1, 1, 2, 2, 2, 3, 3), Feature = c("F2", "F3", "F1", "F2", "F3", "F1", "F3"), Freq = c(2, 1, 3, 1, 2, 4, 3))
ids <- data.frame(PID = 1:3, Level = c("low", "mid", "high"))
我正在将它转换成一个数据框,每行有一个人,语言特征作为列:
f_freq <- data.frame(ids[1:2], matrix(nrow = nrow(ids), ncol = 3))
f_names <- c("F1", "F2", "F3)
names(f_freq)[3:5] <- f_names
所以我想将第一个数据帧 (df) 的频率信息映射到新的数据帧 (f_freq),并且还为每个人没有使用的特征插入 0。我写了一个for循环来达到这个目的:
for (h in 1:length(f_names)) {
for (j in 1:nrow(f_freq)) {
t1 <- filter(df, Feature == f_names[[h]])
if (f_freq$PID[j] %in% t1$PID) {
f_freq[j, f_names[[h]]] <- t1[t1$PID == f_freq$ID[j], "Freq"]
} else {
out[j, f_names[[h]]] <- 0
}
}
}
但是它只返回 NA。当我输入每个功能名称时它会起作用,如下所示。
for (h in 1:length(f_names)) {
for (j in 1:nrow(f_freq)) {
t1 <- filter(df, Feature == "F1")
if (f_freq$PID[j] %in% t1$PID) {
f_freq[j, "F1"] <- t1[t1$PID == f_freq$ID[j], "Freq"]
} else {
out[j, "F1"] <- 0
}
}
}
但我在实际数据中有 35 个特征,所以我想将其自动化。我不确定为什么第一个循环不起作用。如果有人知道如何解决这个问题,请告诉我!!
【问题讨论】: