我在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中是否有内置函数。
感谢。
答案 0 :(得分:0)
您可以尝试split
,do.call
,lapply
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
将结果合并在一起。
我希望这会有所帮助。