【发布时间】:2020-12-11 16:49:41
【问题描述】:
我正在尝试衡量 Twitter 上的政治意识形态(通过使用 Rtweet)。我现在有一个数据框,其中包含 +100 个政治家 user_id 以及“因素 1”和“因素 2”的两个理想分数(两个因素的范围都是 1-4)。它看起来像这样(称为kandidat):
| Navne | Faktor 1 | Faktor 2 |
|---|---|---|
| "Politician1" | 3.5 | 1.0 |
| "Politician2" | 2.0 | 4.0 |
| Etc... | X | X |
然后,我想检测随机 Twitter 用户是否关注我数据集中的一位或多位政客。如果他们例如关注我的数据集中的两位政客——“Politician1”和“Politician2”——然后,我将在这两个因素上为用户分配两位政客理想得分的平均值。一个 Twitter 用户关注这两位政客的例子可以是因子 1 = (3.5+1.0)/2 = 2.25 和因子 2 = (2.0+4.0)/2 = 3.00。
因此,我尝试创建一个简化的循环,其中仅包括来自 Twitter 的两名记者,称为“测试用户”,他们都关注我数据集中的大部分政治人物。然后循环应检查相应记者是否关注一位或多位政治家:如果他们关注,则循环应分配上述值的平均值。如果没有,它们应该自动从数据集中删除。下面的循环确实运行了,但不幸的是提供了错误的输出(参见代码下方的表格):
### loop ###
for(i in 1:ncol(testusers)){
#pick politician1 of dataset
politician1_friends <- get_friends(testusers$Navne[1])
#intersect with candidate data
ids_intersect = intersect(politician1_friends$user_id, kandidat$user_id)
if(length(ids_intersect == 0)){
testusers[i, "anyFriends"] <- FALSE #user has no friends in the politicians df
} else {
#assign values to user based on intersect
politicians_friends = kandidat[kandidat$user_id %in% ids_intersect,]
s1_mean <- mean(politicians_friends$faktor1, na.rm=TRUE)
s2_mean <- mean(politicians_friends$faktor2, na.rm=TRUE)
testusers[i, "faktor1"] <- s1_mean
testusers[i, "faktor2"] <- s2_mean
testusers[i, "anyFriends"] <- TRUE #user has friends in the politicians dataset
}
# etc.
}
上面的代码给了我这个输出:
| Navne | anyFriends |
|---|---|
| "Politician1" | FALSE |
| "Politician2" | NA |
testusers的结构是:structure(list(Navne = c("Politician1", "Politician2"), anyFriends = c(FALSE, NA)), row.names = 1:2, class = "data.frame")。而且我无法发布 kandidat 的整个结构,因为它太大了:但它是一个由政客组成的数据框(包含来自函数 look_up() 的所有信息,例如 user_id、screen_name、text 等。
所以我猜代码需要一些小的改动,但我还没有弄明白。理想情况下,输出 (df) 应该由“仅”三个数据帧列组成:1) UserID/Name 2) Faktor1 3) Faktor2?
【问题讨论】:
-
您的
for循环不会在任何地方使用i索引。