将数据框转换为特殊格式的列表以用于功能

时间:2018-12-01 17:24:34

标签: r list dataframe

我有一个如下数据框:

# pingr::ping(...)
ping: bad linger time.
                  [,1] [,2] [,3]
github.com          NA   NA   NA
stackoverflow.com   NA   NA   NA
google.com          NA   NA   NA
yahoo.com           NA   NA   NA
cisco.com           NA   NA   NA
time.apple.com      NA   NA   NA

但是,要输入到函数(ComplexHeatmap)中,我需要一个如下列表:

# install.packages("speedtest")
Warning in install.packages :
  package ‘speedtest’ is not available (for R version 3.5.1)

从此数据帧转换为这种格式的列表的最简单方法是什么?进行Create or replace PROCEDURE p_event_loc (Passed_variable in varchar) IS Cursor c1 is select en, ln, pn from Et, Rn, Ln2, Pt where Rn.status = 1 and Pt.pid = Rn.pid and Et.eid = Rn.eid and Ln2.lid = Et.lid; E_en Et.en%type; L_ln Ln2.ln%type; P_pn Pt.pn%type; BEGIN Open c1; Loop fetch c1 into E_en, L_ln, P_pn; exit when c1%notfound; dbms_output.put_line(Passed_variable|| ' is registered for ' || E_en || ' at ' || L_ln); End loop; Close c1; END; 格式不正确。

谢谢! 杰克

2 个答案:

答案 0 :(得分:2)

一种方法将涉及使用plyr。我怀疑您可能还不止这两列,所以让

df <- data.frame(name = c("chr", "test"), ncol = c(2, 3), a = 1:2)
#   name ncol a
# 1  chr    2 1
# 2 test    3 2

然后

dlply(df, .(name), function(r) as.list(r[-1]))
# $chr
# $chr$ncol
# [1] 2
#
# $chr$a
# [1] 1
#
#
# $test
# $test$ncol
# [1] 3
#
# $test$a
# [1] 2
#
#
# attr(,"split_type")
# [1] "data.frame"
# attr(,"split_labels")
#   name
# 1  chr
# 2 test

答案 1 :(得分:1)

一个选项是split中的base R

split(setNames(as.list(df$ncol), rep('ncol', nrow(df))), df$name)