从列表元素的每一行创建数据框

时间:2018-04-20 11:38:18

标签: r list dataframe

假设我有一个数据框列表,列表中的每个数据框都有相同的结构:

def multilayer_perceptron(x, weights, biases, beta_weights):
    layer_1 = tf.add(tf.matmul(x, weights["h1"]), biases["b1"])
    #layer_1 = tf.nn.relu(layer_1) # Old
    layer_1 = custom_sigmoid(x, beta_weights["beta1"]) # New
    out_layer = tf.add(tf.matmul(layer_1, weights["out"]), biases["out"])
    return out_layer

等等。我想创建(在这种情况下)由每个$ final的行创建的6个新数据帧。这意味着第一个数据帧应该包含每个数据帧的所有第一行,如下所示:

$final01_1
    k    h      value
85 12 h=12 0.02867449
86 11 h=23 0.02885711
87 10 h=15 0.02868290
88  9 h=14 0.02872784
89  8 h=13 0.02864886
90  7 h=19 0.02869149
.   . ..    .....

$final02_1
    k    h      value
85 12 h=12 0.02013402
86 11 h=17 0.02012700
87 10 h=17 0.01972729
88  9 h=26 0.02025178
89  8 h=13 0.02035556
90  7 h=13 0.02022585

$final03_1
k    h      value
85 12 h=55 0.04254915
86 11 h=56 0.04283464
87 10 h=24 0.04244404
88  9 h=22 0.04239187
89  8 h=21 0.04318766
90  7 h=21 0.04510606

这适用于所有行。 我认为lapply的东西是解决方案,但我没有得到有效的解决方案。

希望,你可以帮助我

1 个答案:

答案 0 :(得分:2)

我们可以遍历rownames,然后提取行

lst2 <- lapply(rownames(lst[[1]]), function(rn)
           do.call(rbind, lapply(lst, function(y) y[rn,])))

注意:data.frame不能具有相同的行名称,因此重复的行名称将变为具有make.unique的唯一行名称

这也可以使用split完成。使用list循环遍历map_df,使用(rownames_to_column)创建行名称列并获取单个数据集,然后通过“rn”列获取split以便我们获取list data.framelibrary(tidyverse) lst %>% map_df(rownames_to_column, 'rn') %>% split(.$rn) 具有相同的'rn'

#$`85`
#   rn  k    h      value
#1  85 12 h=12 0.02867449
#7  85 12 h=12 0.02013402
#13 85 12 h=55 0.04254915

#$`86`
#   rn  k    h      value
#2  86 11 h=23 0.02885711
#8  86 11 h=17 0.02012700
#14 86 11 h=56 0.04283464

#$`87`
#   rn  k    h      value
#3  87 10 h=15 0.02868290
#9  87 10 h=17 0.01972729
#15 87 10 h=24 0.04244404

#$`88`
#   rn k    h      value
#4  88 9 h=14 0.02872784
#10 88 9 h=26 0.02025178
#16 88 9 h=22 0.04239187

#$`89`
#   rn k    h      value
#5  89 8 h=13 0.02864886
#11 89 8 h=13 0.02035556
#17 89 8 h=21 0.04318766

#$`90`
#   rn k    h      value
#6  90 7 h=19 0.02869149
#12 90 7 h=13 0.02022585
#18 90 7 h=21 0.04510606

-output

public currentUser = this.currentUserSubject
                         .asObservable()
                         .filter(Boolean)
                         .distinctUntilChanged(); 

如上所述,最好有唯一的行名。因此,我们将'rn'留作列