将一列中的每个值除以R

时间:2017-06-30 01:00:36

标签: r

我的数据框的值在A列和B列中。 还有另一个专栏频率'有6个级别:https://www.dropbox.com/s/5o2oaettbkbzwf9/datadata.csv?dl=0

我必须从A列中取出第一个值并将其除以B列中的每个值(仅当A和B值属于相同的因子'频率'级别时)。 我必须对A列中的所有值重复相同的操作。 我应该创建一个新的数据框架。它应该包含有关“频率”的信息。水平。 我从来没有做过这样的事情...如果有人知道解决方案和一些简单的解释我会非常感激。

1 个答案:

答案 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)