r - 关系和条件数据编码
问题描述
我有一个从 1990 年到 2016 年列出的每个州的数据集(每个州 27 个观察值,对于 50 个州,是 1350 个观察值)。在数据集中,我有state
, year
, pass
(通过一些法律)和一个州列表neighbors
。数据看起来像这样...
> head(data)
state year pass neighbors
1 Alabama 1990 0 Mississippi,Tennessee,Georgia,Florida
2 Alabama 1991 0 Mississippi,Tennessee,Georgia,Florida
3 Alabama 1992 0 Mississippi,Tennessee,Georgia,Florida
4 Alabama 1993 0 Mississippi,Tennessee,Georgia,Florida
5 Alabama 1994 0 Mississippi,Tennessee,Georgia,Florida
6 Alabama 1995 0 Mississippi,Tennessee,Georgia,Florida
我试图弄清楚如何执行以下操作:
例如,state
对于year
第 1 行(阿拉巴马州,1990 年),查看该行的邻居列表(每个项目)并在同一年的状态向量中查找该项目(状态),看看它们是否通过那个法律pass==1
。如果是这样,请创建一个neighbor_passed
评估为的新变量1
。
例如,它会迭代,在 1990 年寻找密西西比州以查看是否pass == 1
,然后在 1990 年寻找田纳西州以查看是否pass==1
。它会为每一行执行此操作,匹配该year
行,以搜索同一年pass==1
的任何州。neighbors
这是我到目前为止所尝试的:
f<-function(x){
x[5]<-0
for(row in 1:dim(x)[1]){
ego_state <- x[row,1]
ego_year <- x[row,2]
alter_list <- x[row,4]
alter_list <- as.character(unlist(alter_list))
neighbors <- unlist(strsplit(alter_list, "[,]"))
for(i in neighbors){
year <- ego_year
print(paste(i,year))
#if(x[1]==i && x[2]==year && x[3]==1){
#x[5]<-1
#}
}
}
}
正如您在我评论的内容中看到的那样,我希望该函数在 ego 的同一年(例如 1990 年)通过列/变量states
查找neighbors
(例如密西西比州)中的项目,转到该行(其中state
== 密西西比州和year
== 1990),并检查是否pass
== 1。如果是这样,我想创建另一个变量(例如neighbor_passed
),其中输入1的值。对于所有其他人,输入 0。然后继续对所有 i in neighbors
、 peryear
进行迭代,并继续对数据集中的每一行进行迭代。
解决方案
干得好!
data$neighbor_passed<-unlist(lapply(1:length(data$state),
function(j) {neighbors_j<-unlist(strsplit(as.character(data$neighbors[j]),","));
sum(unlist(lapply(neighbors_j,function(x) data$pass[data$year==data[j,]$year & data$state==x])))>0}))
推荐阅读
- ios - 尽管背景音频功能和会话类别,但背景音频停止
- symfony - Prestashop 1.7.4 - 命名空间的模块错误
- excel - 需要遍历多个文件中的多个工作表并为每个工作表添加一列
- python - keras 不使用 gpu 但 tensorflow 是
- sql - Oracle 12c - 选择具有序列的记录
- javascript - Gulp watcher - 单个文件的调用函数
- go - Google Storage:如何检查存储桶是否存在
- swift - 从原始表中提取值
- javascript - 使用 Mocha 和 Sinon 进行测试时,如何将“无关”函数作为回调传递?
- powershell - 如何通过 RDP 连接通过 PowerShell 或 CMD 传输文件?