R 我需要哪种合并?
我发现合并是一个困难的概念(内部、外部、右侧、左侧…),所以请原谅这个简单化的问题。R 我需要哪种合并?,r,merge,R,Merge,我发现合并是一个困难的概念(内部、外部、右侧、左侧…),所以请原谅这个简单化的问题。 我想将生成的每个列合并到前面的列 labelA <- array(letters[1:10], dim=c(10,1)) ## Function: test_values ## test_func = function(df, nameA, nameB) { test_values <- array(data=1, dim=c(10,1)) for (i in 1:10){ test_val
我想将生成的每个列合并到前面的列
labelA <- array(letters[1:10], dim=c(10,1))
## Function: test_values ##
test_func = function(df, nameA, nameB) {
test_values <- array(data=1, dim=c(10,1))
for (i in 1:10){
test_values[i] <- paste(nameA, nameB, i, sep="_")
}
merge (x=df, y=test_values, sort=FALSE, all=TRUE) # ??
}
# Comparison #1
nameA <-"A"
nameB <-"B"
gran_total = test_func(labelA, nameA, nameB)
# Comparison #2
nameA <-"C"
nameB <-"D"
gran_total = test_func(gran_total, nameA, nameB)
可能您需要的是
cbind
或data.frame
而不是merge
以下是一个例子:
> labelA <- array(letters[1:3], dim=c(3,1))
> # simple way
> data.frame(labelA, paste("A", "B", 1:3, sep = "_"), paste("C", "D", 1:3, sep = "_"))
labelA paste..A....B...1.3..sep...._.. paste..C....D...1.3..sep...._..
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> # generalize as a function
> f <- function(df, nA, nB) paste(nA, nB, 1:nrow(df), sep = "_")
> data.frame(labelA, f(labelA, "A", "B"), f(labelA, "C", "D"))
labelA f.labelA...A....B.. f.labelA...C....D..
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> # more generalize for flexible arguments
> f2 <- function(df, labels)
+ data.frame(df, do.call("cbind", llply(labels,
+ function(x) do.call("paste", c(as.list(x), list(1:nrow(df)), sep = "_")))))
> f2(labelA, list(c("A", "B"), c("C", "D")))
df X1 X2
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> f2(labelA, list(c("A", "B"), c("C", "D"), c("E", "F", "G")))
df X1 X2 X3
1 a A_B_1 C_D_1 E_F_G_1
2 b A_B_2 C_D_2 E_F_G_2
3 c A_B_3 C_D_3 E_F_G_3
>labelA#简单方法
>数据帧(标签,粘贴(“A”,“B”,1:3,sep=“”)),粘贴(“C”,“D”,1:3,sep=“”))
拉贝拉浆糊…A…B…1.3…9月。。粘贴..C..D..1.3..sep。。
1 a_B_1 C_D_1
2 b A_b_2 C_D_2
3 c A_B_3 c_D_3
>#将其概括为函数
>数据帧(labelA,f(labelA,“A”,“B”),f(labelA,“C”,“D”))
labelA f.labelA…A…B。。f、 拉贝拉。。
1 a_B_1 C_D_1
2 b A_b_2 C_D_2
3 c A_B_3 c_D_3
>#灵活参数的更一般化
>f2(标签,列表(c(“A”、“B”)、c(“c”、“D”))
dfx1x2
1 a_B_1 C_D_1
2 b A_b_2 C_D_2
3 c A_B_3 c_D_3
>f2(标签,列表(c(“A”、“B”)、c(“c”、“D”)、c(“E”、“F”、“G”))
dfx1x2x3
1 a_B_1 C_D_1 E_F_1
2 b A_b_2 C_D_2 E_F_2
3 c A_B_3 c_D_3 E_F_G_3
我发现data.frame效果最好。我应该想到。。。我试过cbind,但没能让它工作。干杯,K
> labelA <- array(letters[1:3], dim=c(3,1))
> # simple way
> data.frame(labelA, paste("A", "B", 1:3, sep = "_"), paste("C", "D", 1:3, sep = "_"))
labelA paste..A....B...1.3..sep...._.. paste..C....D...1.3..sep...._..
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> # generalize as a function
> f <- function(df, nA, nB) paste(nA, nB, 1:nrow(df), sep = "_")
> data.frame(labelA, f(labelA, "A", "B"), f(labelA, "C", "D"))
labelA f.labelA...A....B.. f.labelA...C....D..
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> # more generalize for flexible arguments
> f2 <- function(df, labels)
+ data.frame(df, do.call("cbind", llply(labels,
+ function(x) do.call("paste", c(as.list(x), list(1:nrow(df)), sep = "_")))))
> f2(labelA, list(c("A", "B"), c("C", "D")))
df X1 X2
1 a A_B_1 C_D_1
2 b A_B_2 C_D_2
3 c A_B_3 C_D_3
> f2(labelA, list(c("A", "B"), c("C", "D"), c("E", "F", "G")))
df X1 X2 X3
1 a A_B_1 C_D_1 E_F_G_1
2 b A_B_2 C_D_2 E_F_G_2
3 c A_B_3 C_D_3 E_F_G_3