重塑/转置R中data.frame的选择列

时间:2016-09-30 15:27:26

标签: r transform reshape transpose

我在R中进行了一些数据分析,并且我在data.frame中有以下数据:

var list = vm.activeSparepart.attachments;
for (var i=0; i < data.files.length; i++) {
    list.push({ filename: data.files[i] });
}
vm.activeSparepart.attachments = list;

我想将其转换为以下内容:

    Dim query = From r In db.eq_list
            Join s In db.interview_main On r.CLIENTCODE Equals s.CLIENTCODE And r.CONTROL Equals s.CONTROL
            Select New With {r.UserName, r.CONTROL, r.CLIENTCODE, r.CLIENTLOCATION, r.IDATETIME, r.FIRSTNAME,
                r.LASTNAME, If(s.Code is Nothing, 0, s.Code)}


dgvOnHold.DataSource = query.ToList

如果有人有任何建议,我会非常感激。我可以在for循环中完成它,但我想知道R中是否有内置函数。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试splitdo.calllapply dcast(来自reshape2)和rbind.fill(来自{{1}的组合获得所需的输出:

数据:

plyr

代码:

df1 <- structure(list(v1 = c(11L, 11L, 11L, 15L, 15L, 20L), v2 = 3:8), .Names = c("v1", 
"v2"), class = "data.frame", row.names = c(NA, -6L))

输出:

do.call(plyr::rbind.fill,lapply(split(df1, df1$v1), function(x) {
    tempdf <- data.frame(reshape2::dcast(x, v1~v2, value.var = "v2"))
    names(tempdf) <- paste("col", 1:ncol(tempdf), sep = "")
    return(tempdf)
}))

说明:

此处的想法是 col1 col2 col3 col4 11 3 4 5 15 6 7 NA 20 8 NA NA split您的data.frame;并为每个子集应用v1运算,其公式为dcast。这意味着将列v1 ~ v2中的所有值排列成一行,并以v2中的值为前缀。完成v1子集后,您可以使用cast包中的rbind.fill将结果合并在一起。

我希望这会有所帮助。

相关问题