我的数据框的值在A列和B列中。 还有另一个专栏频率'有6个级别:https://www.dropbox.com/s/5o2oaettbkbzwf9/datadata.csv?dl=0
我必须从A列中取出第一个值并将其除以B列中的每个值(仅当A和B值属于相同的因子'频率'级别时)。 我必须对A列中的所有值重复相同的操作。 我应该创建一个新的数据框架。它应该包含有关“频率”的信息。水平。 我从来没有做过这样的事情...如果有人知道解决方案和一些简单的解释我会非常感激。
答案 0 :(得分:1)
考虑使用by
将数据帧切换为每个频率级别的组,然后运行expand.grid
操作以绑定A和B的所有可能组合。然后进行划分两个。使用cbind
检索当前频率。并且!is.na(...)
将过滤掉NA。
df <- read.csv('/path/to/datadata.csv')
dfList <- by(df, df$frequency, function(i){
a_b_df <- cbind(frequency=max(as.character(i$frequency)),
expand.grid(A=i$A[!is.na(i$A)], B=i$B[!is.na(i$B)]))
a_b_df$div <- a_b_df$A / a_b_df$B
return(a_b_df)
})
# FIRST DF ELEMENT, 10K
head(dfList$`10K`)
# frequency A B div
# 1 10K 0.2649175 2.541833 0.1042230
# 2 10K 0.6181931 2.541833 0.2432076
# 3 10K 1.1950971 2.541833 0.4701714
# 4 10K 2.6086954 2.541833 1.0263048
# 5 10K 0.3557454 2.541833 0.1399562
# 6 10K 1.9483414 2.541833 0.7665104
# SECOND DF ELEMENT, 12.5K
head(dfList$`12.5K`)
# frequency A B div
# 1 12.5K 1.3723178 2.138316 0.6417750
# 2 12.5K 1.2204621 2.138316 0.5707585
# 3 12.5K 1.1798552 2.138316 0.5517684
# 4 12.5K 0.5880284 2.138316 0.2749960
# 5 12.5K 0.4865612 2.138316 0.2275441
# 6 12.5K 0.5011111 2.138316 0.2343485
# ROW BIND ALL DF ELEMENTS INTO ONE LARGE DF
big_df <- do.call(rbind, dfList)