我是新手,并试图学习它们。我想创建一个由现有数据帧的前两列组成的数据帧,然后遍历其他列
structure(list(chr = structure(c(1L, 1L, 1L), .Label = c("chr1",
"chr10", "chr11", "chr12", "chr13", "chr14", "chr15", "chr16",
"chr17", "chr18", "chr19", "chr2", "chr20", "chr21", "chr22",
"chr3", "chr4", "chr5", "chr6", "chr7", "chr8", "chr9", "chrX",
"chrY"), class = "factor"), leftPos = c(736092L, 818159L, 4105086L
), OC_AH_026C = c(45.1826170650884, 111.038301929785, 162.784744393493
), OC_AH_026C.1 = c(69.5661878331496, 125.081280674657, 156.370814610398
), OC_AH_026T = c(13.0340925716891, 12.5266357381896, 103.104314756262
), OC_AH_058T = c(87.1139149965077, 118.963251567791, 184.310234235766
), OC_AH_084T = c(29.1110962936184, 103.142476112692, 57.4757484596735
), OC_AH_086T = c(49.8341378137185, 81.0115658918929, 111.544725651556
), OC_AH_088T = c(116.577841333773, 151.623597035088, 223.820829641782
), OC_AH_096T = c(49.4884929529433, 102.804397862003, 93.6300590189256
), OC_AH_100T = c(71.765051763653, 112.699590396659, 80.2829228050656
), OC_AH_127T = c(30.7160179462423, 67.0375426897889, 127.866366869741
), OC_AH_133T = c(52.2245114985339, 155.117259635674, 138.734285341996
), OC_ED_008T = c(41.8100880618589, 68.6094376568824, 105.782036139953
), OC_ED_016T = c(48.3869187212944, 96.8326360776995, 106.200244947009
), OC_ED_031T = c(90.1411196291989, 145.542416317035, 192.830562181348
), OC_ED_036T = c(67.904629707369, 99.463572413255, 67.3078503376319
), OC_GS_001T = c(47.9361950767848, 116.055138068745, 52.8596096234041
), OC_QE_062T = c(67.8446410258547, 123.04125763248, 106.916513687798
), OC_RS_010T = c(49.6090742254807, 75.9345058087896, 104.80841088895
), OC_RS_027C = c(33.7412638579173, 153.298282222451, -2.05705350770025
), OC_RS_027C.1 = c(33.7412638579173, 153.298282222451, -2.05705350770025
), OC_RS_027T = c(58.4326068403206, 69.865303753045, 107.704811526888
), OC_SH_051T = c(54.6865696139712, 67.6958149126245, 98.1732789194498
), OC_ST_014T = c(43.8531379064933, 125.745138619963, 135.887717956136
), OC_ST_016T = c(48.2210298858763, 60.1467945662746, 120.514633516518
), OC_ST_020T = c(48.3448858835415, 112.106993693416, 164.732491989977
), OC_ST_024T = c(21.7112829990469, 81.989876554455, 136.462241522537
), OC_ST_033T = c(34.5197938664751, 98.6363326742325, 103.388028944679
), OC_ST_034C = c(84.490540673954, 150.258994150465, 105.050750013976
), OC_ST_034C.1 = c(75.3265951983204, 157.455918229456, 141.702454469689
), OC_ST_036T = c(68.0137540823591, 170.645072050375, 155.360213383303
), OC_ST_037T = c(32.6118243163312, 82.2520450065369, 72.4488011155402
), OC_ST_040T = c(57.2318727994898, 98.8476262477287, 124.421215430329
), OC_WG_001T = c(68.0955387650591, 103.472216160336, 74.7533135600875
), OC_WG_002T = c(46.9712239117761, 113.059264866894, 133.174706581127
), OC_WG_005T = c(85.4574456521181, 151.304273231051, 194.706549548876
), OC_WG_009T = c(19.4962970923775, 76.0673012283531, 80.077527998512
), OC_WG_019T = c(59.7138404173593, 170.79699936555, 100.561619823622
), Means = c(65.6244593920892, 89.6828456025396, 94.6087848830889
), sd = c(33.8452092418172, 36.6588783417301, 45.9923791622027
)), .Names = c("chr", "leftPos", "OC_AH_026C", "OC_AH_026C.1",
"OC_AH_026T", "OC_AH_058T", "OC_AH_084T", "OC_AH_086T", "OC_AH_088T",
"OC_AH_096T", "OC_AH_100T", "OC_AH_127T", "OC_AH_133T", "OC_ED_008T",
"OC_ED_016T", "OC_ED_031T", "OC_ED_036T", "OC_GS_001T", "OC_QE_062T",
"OC_RS_010T", "OC_RS_027C", "OC_RS_027C.1", "OC_RS_027T", "OC_SH_051T",
"OC_ST_014T", "OC_ST_016T", "OC_ST_020T", "OC_ST_024T", "OC_ST_033T",
"OC_ST_034C", "OC_ST_034C.1", "OC_ST_036T", "OC_ST_037T", "OC_ST_040T",
"OC_WG_001T", "OC_WG_002T", "OC_WG_005T", "OC_WG_009T", "OC_WG_019T",
"Means", "sd"), row.names = c(1078L, 1146L, 860L), class = "data.frame")
使用此代码
for(i in dfMatched[3:ncol(dfMatched)]){
i<-dfMatched[c(1:2,i)]}
我希望每个结果数据帧都具有我来自的列的名称,以便我可以区分它们。在我运行上面的那一刻,我得到了错误:
Error in `[.default`(dfMatched, c(1:2, i)) :
only 0's may be mixed with negative subscripts
答案 0 :(得分:2)
我认为你最好使用一个列表,将所有内容保持在一起,并使用lapply
非常容易地对所有结果数据框执行类似的操作:
df_list = lapply(names(dfMatched)[-(1:2)],
FUN = function(x) dfMatched[, c(names(dfMatched)[1:2], x)])
names(df_list) = names(dfMatched)[-(1:2)]
这相当于
df_list2 = list()
for (i in names(dfMatched)[-(1:2)]) {
df_list2[[i]] = dfMatched[, c(names(dfMatched)[1:2], i)]
}
两者都生成数据框列表,以前两列中包含的列命名。
从@thelatemail中获取提示,以下内容也有效:
temp = cbind(dfMatched[1:2], stack(dfMatched[-(1:2)]))
df_list3 = split(temp, f = temp$ind)
将它们列入列表的好处是,如果您想对所有这些内容执行某些操作,则可以使用lapply
或sapply
。