R:根据条件操作数据帧列表 我认为这个问题很难,这超出了我的水平,我希望将来能有人来帮助我学会如何做到这一点。如果我没有提供足够的信息,或提供不清楚的信息,请让我知道
我有一个数据帧列表:R:根据条件操作数据帧列表 我认为这个问题很难,这超出了我的水平,我希望将来能有人来帮助我学会如何做到这一点。如果我没有提供足够的信息,或提供不清楚的信息,请让我知道,r,list,R,List,我有一个数据帧列表: d1<-data.frame( Data0 = c("N,R,15,P,D", "_KEY_VALUE_1", -1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25), Data1 = c("N,15,C,D", "Garden",0.9759,0.7121,0.7376,0.7647,0.7927,0.8209,0.8487,0.8759,0.9021,0.9
d1<-data.frame( Data0 = c("N,R,15,P,D", "_KEY_VALUE_1", -1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25),
Data1 = c("N,15,C,D", "Garden",0.9759,0.7121,0.7376,0.7647,0.7927,0.8209,0.8487,0.8759,0.9021,0.9274,0.9518,
1,1.0249,1.0514,1.0805,1.1132,1.1508,1.1946,1.2462,1.3071,1.3793,1.4649,1.5661,1.6854,1.8254,1.9887))
d2<-data.frame(
Data0=c("N,R,2,I,D","no_flowers",-2 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,10 ,11) ,
Data1=c("N,15,C,D","Garden",0.8891 ,0.8891,0.9051,1,0.8891,0.8891,0.7907,0.8891,0.9929,0.8891,0.8891,0.8891,0.8891)
)
d3<-data.frame(Data0=c("A,X,15,P,D","_KEY_TEXT_1","Y","N","U"),
Data1=c("N,15,C,D","Garden",1.0834,1,1))
d4<-data.frame(
Data0=c("A,X,15,P,D","_KEY_TEXT_1","Y","Y","Y","Y","Y","Y","N","N","N","N","N","N"),
Data1=c("N,R,3,I,D","house_age",16,18,19,20,21,50,16,18,19,20,21,50),
Data2=c("N,15,C,D","Garden",2.2291,2.0743,1.9369,1.8148,1.7064,1.6102,2.2291,2.0743,1.9369,1.8148,1.7064,1.6102)
)
dfl<-list(d1,d2,d3,d4)
names(dfl)<-c("no_animals","no_flowers","radiation","summer_x_house_age")
如果在每个数据帧中看到第一列的第一个值,则第一个逗号后的第二个字母是R或X。R表示范围,X表示不范围。如果字母范围为R,我希望将该列操作为两列,即我希望d1数据帧的结果如下所示:
对于d4数据帧,夏季Y/N和房屋年龄之间的交互作用,我们看到只有第二列房屋年龄在范围内,因此我想对d1做相同的操作,但夏季=Y和夏季=N
数据帧上的一点背景信息,如果它使事情更容易理解:
这是我在R之外建立的glm模型的结果,我希望将其导入R。数据帧的最后一列始终是回归的β值,前面的列是变量,有时是分类X,有时是连续R。当它们是连续/范围时,我必须操作列以获取from和to,因为我想使用这个列表来计算一些数据的概率,其中我有我在glm模型中使用的回归器的值。最上面的数字表示从&不包括无穷大,到&包括最上面的数字,第二个最上面的数字表示从&不包括最上面的数字,到&包括第二个最上面的数字,依此类推。我知道了
定义一个新函数,该函数查找键字母R或X,如果为R,则返回一个新的数据帧,如果为X,则返回相同的数据帧
Rcheck <- function(df){
# Isolate the letter being tested for R or X
key_letter <- substr(as.character(df[1,1]),3,3)
if( key_letter == "R"){ # Proceed if letter is R
# Assign new dataframe
df_new <- df
# Add new column.
df_new[,'Data0_'] <- as.character(df_new[,'Data0'])
# Shift down and add -9999 value
rows <- nrow(df_new)
df_new[,'Data0_'][4:rows] <- as.character(df_new[,'Data0'][3:(rows-1)])
df_new[,'Data0_'][3] <- "-9999"
# Take new column from the end and put it beside Data0
column1_name <- colnames(df_new)[1]
new_column_name <- colnames(df_new)[ncol(df_new)]
other_column_names <- colnames(df_new)[2:(ncol(df_new)-1)]
df_new <- df_new[,c(column1_name, new_column_name, other_column_names)]
df_new
} else{ # If letter is not R
df
}
}
@冻糕:谢谢你向我指出这一点,也许我可以澄清一下。数据帧是在我读入一堆.xlsx文件时创建的,所以这就是我在Q中试图重新创建的。如果我理解正确,我应该用上面的所有字符重新发布数据帧,对吗?我想你可能是对的,它们确实都是R中的字符。@Parfait:对不起,我不明白,这是原始的Excel结果,我只是在这里手动输入的。。。我所说的概率只是一些截距乘以每个数据帧最后一列中的所有归属系数。恐怕我不知道如何组织不同,对不起。。。
new_list <- lapply(dfl, Rcheck)