关系和条件数据编码
relational and conditional data coding
我有一个数据集,其中列出了从 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
我正在尝试弄清楚如何执行以下操作:
例如,以第 1 行(1990 年的阿拉巴马州)的 state
和 year
为例,查看该行的邻居列表(每个项目)并在同年各州的矢量,看看他们是否通过了该法律 pass==1
。如果是这样,创建一个新变量 neighbor_passed
评估为 1
.
例如,它会迭代,在 1990 年寻找密西西比州以查看是否 pass == 1
,然后在 1990 年寻找田纳西州以查看是否 pass==1
。它将为每一行执行此操作,匹配该行的 year
,以搜索同一年 neighbors
中的任何州是否 pass==1
。
这是我到目前为止尝试过的方法:
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
#}
}
}
}
正如您在我注释掉的内容中看到的那样,我希望函数通过 column/variable states
查找 neighbors
中的项目(例如密西西比州) ego 的同一年(例如 1990 年),转到该行(其中 state
== Mississippi 和 year
== 1990),并检查 pass
== 1。如果是,我' d 喜欢创建另一个变量(例如 neighbor_passed
),其中输入值 1。对于所有其他,输入 0。然后继续迭代 neighbors
中的所有 i,每个 year
,并继续迭代数据集中的每一行。
如果我没有正确理解你的问题。
library(dplyr)
data <- mutate(data, neighbor_passed =
ifelse(pass == 0, 0, 1))
给你!
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}))
我有一个数据集,其中列出了从 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
我正在尝试弄清楚如何执行以下操作:
例如,以第 1 行(1990 年的阿拉巴马州)的 state
和 year
为例,查看该行的邻居列表(每个项目)并在同年各州的矢量,看看他们是否通过了该法律 pass==1
。如果是这样,创建一个新变量 neighbor_passed
评估为 1
.
例如,它会迭代,在 1990 年寻找密西西比州以查看是否 pass == 1
,然后在 1990 年寻找田纳西州以查看是否 pass==1
。它将为每一行执行此操作,匹配该行的 year
,以搜索同一年 neighbors
中的任何州是否 pass==1
。
这是我到目前为止尝试过的方法:
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
#}
}
}
}
正如您在我注释掉的内容中看到的那样,我希望函数通过 column/variable states
查找 neighbors
中的项目(例如密西西比州) ego 的同一年(例如 1990 年),转到该行(其中 state
== Mississippi 和 year
== 1990),并检查 pass
== 1。如果是,我' d 喜欢创建另一个变量(例如 neighbor_passed
),其中输入值 1。对于所有其他,输入 0。然后继续迭代 neighbors
中的所有 i,每个 year
,并继续迭代数据集中的每一行。
如果我没有正确理解你的问题。
library(dplyr)
data <- mutate(data, neighbor_passed =
ifelse(pass == 0, 0, 1))
给你!
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}))