Mar*_*ark 69 r insert dataframe
我有一个包含a,b和c列的数据框.我想在b和c之间添加一个新列d.我知道我可以通过使用cbind在最后添加d但是如何将它插入两列之间?
Kev*_*rca 67
我建议你使用的功能add_column()
从tibble
包.
library(tibble)
dataset <- data.frame(a = 1:5, b = 2:6, c=3:7)
add_column(dataset, d = 4:8, .after = 2)
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用列名而不是列索引:
add_column(dataset, d = 4:8, .after = "b")
Run Code Online (Sandbox Code Playgroud)
或者使用参数.before
而不是.after
更方便.
add_column(dataset, d = 4:8, .before = "c")
Run Code Online (Sandbox Code Playgroud)
ash*_*h57 32
只是一个R初学者,但我认为这也有效:
添加新列:
df$d <- list/data
Run Code Online (Sandbox Code Playgroud)
然后你可以重新排序它们.
df <- df[, c("a", "b", "d", "c")]
Run Code Online (Sandbox Code Playgroud)
Mat*_*erg 19
您可以使用[重新排序列,或者按所需顺序显示列.
d <- data.frame(a=1:4, b=5:8, c=9:12)
target <- which(names(d) == 'b')[1]
cbind(d[,1:target,drop=F], data.frame(d=12:15), d[,(target+1):length(d),drop=F])
a b d c
1 1 5 12 9
2 2 6 13 10
3 3 7 14 11
4 4 8 15 12
Run Code Online (Sandbox Code Playgroud)
the*_*ail 12
假设c
始终紧随其后b
,b
无论b
data.frame中的哪个位置,此代码都会添加一列.
> test <- data.frame(a=1,b=1,c=1)
> test
a b c
1 1 1 1
> bspot <- which(names(test)=="b")
> data.frame(test[1:bspot],d=2,test[(bspot+1):ncol(test)])
a b d c
1 1 1 2 1
Run Code Online (Sandbox Code Playgroud)
或者更自然地:
data.frame(append(test, list(d=2), after=match("b", names(test))))
Run Code Online (Sandbox Code Playgroud)
创建一个示例 data.frame 并向其添加一列。
df = data.frame(a = seq(1, 3), b = seq(4,6), c = seq(7,9))
df['d'] <- seq(10,12)
df
a b c d
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
Run Code Online (Sandbox Code Playgroud)
按列索引重新排列
df[, colnames(df)[c(1:2,4,3)]]
Run Code Online (Sandbox Code Playgroud)
或按列名
df[, c('a', 'b', 'd', 'c')]
Run Code Online (Sandbox Code Playgroud)
结果是
a b d c
1 1 4 10 7
2 2 5 11 8
3 3 6 12 9
Run Code Online (Sandbox Code Playgroud)
这是在数据框的特定位置插入列的快速但肮脏的方法。就我而言,原始数据框中有 5 列:并且我将在和之间c1, c2, c3, c4, c5
插入一个新列。c2b
c2
c3
1)我们首先创建测试数据框:
> dataset <- data.frame(c1 = 1:5, c2 = 2:6, c3=3:7, c4=4:8, c5=5:9)
> dataset
c1 c2 c3 c4 c5
1 1 2 3 4 5
2 2 3 4 5 6
3 3 4 5 6 7
4 4 5 6 7 8
5 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
c2b
2)在数据框的末尾添加新列:
> dataset$c2b <- 10:14
> dataset
c1 c2 c3 c4 c5 c2b
1 1 2 3 4 5 10
2 2 3 4 5 6 11
3 3 4 5 6 7 12
4 4 5 6 7 8 13
5 5 6 7 8 9 14
Run Code Online (Sandbox Code Playgroud)
3) 根据列索引对数据框重新排序。就我而言,我想在现有列 2 和 3 之间插入新列 (6)。我通过使用c(1:2, 6, 3:5)
相当于 的向量来寻址数据帧上的列来实现这一点c(1, 2, 6, 3, 4, 5)
。
> dataset <- dataset[,c(1:2, 6, 3:5)]
> dataset
c1 c2 c2b c3 c4 c5
1 1 2 10 3 4 5
2 2 3 11 4 5 6
3 3 4 12 5 6 7
4 4 5 13 6 7 8
5 5 6 14 7 8 9
Run Code Online (Sandbox Code Playgroud)
那里!