我有一个包含 A 列和 B 列值的数据框。还有另一列“频率”有 6 个级别:https : //www.dropbox.com/s/5o2oaettbkbzwf9/datadata.csv?dl=0
我必须从 A 列中取出第一个值并将其除以 B 列中的每个值(但仅当 A 和 B 值属于同一因子“频率”级别时)。我必须对 A 列中的所有值重复相同的操作。我应该创建一个新的数据框。它应该有关于“频率”级别的信息。我从来没有做过这样的事情......如果有人知道解决方案和一些简单的解释,我将不胜感激。
考虑使用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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句