Nan*_*ncy 11 indexing r dataframe
有没有办法系统地选择数据框的最后一列?我希望能够将最后一列移动到第一列,但在移动时保持列的顺序.我需要一种方法来做到这一点,它不会列出使用子集的所有列(数据,选择= C(在新秩序中列出的所有列)),因为我将使用许多不同的数据帧.
这是一个示例,我想将最后两列移动到数据框的前面.它有效,但它很难看.
A = rep("A", 5)
B = rep("B", 5)
num1 = c(1:5)
num2 = c(36:40)
mydata2 = data.frame(num1, num2, A, B)
# Move A and B to the front of mydata2
mydata2_move = data.frame(A = mydata2$A, B = mydata2$B, mydata2[,1: (ncol(mydata2)-2)])
# A B num1 num2
#1 A B 1 36
#2 A B 2 37
#3 A B 3 38
#4 A B 4 39
#5 A B 5 40
Run Code Online (Sandbox Code Playgroud)
更改原始数据框中的列数会导致问题.这有效(见下文),但命名被抛弃了.为什么这两个例子表现不同?有没有更好的方法来做到这一点,并推广它?
mydata1_move = data.frame(A = mydata1$A, B = mydata1$B, mydata1[,1: (ncol(mydata1)-2)])
# A B mydata1...1..ncol.mydata1....2..
#1 A B 1
#2 A B 2
#3 A B 3
#4 A B 4
#5 A B 5
Run Code Online (Sandbox Code Playgroud)
描述的问题与标题不匹配,现有的答案解决了移动列部分,并没有真正解释如何选择最后N列.
如果您只想在矩阵/数据框中选择最后n列而不知道列名称:
mydata2[,ncol(mydata2)]
Run Code Online (Sandbox Code Playgroud)
如果你想要最后n列,试试吧
mydata[,(ncol(mydata2)-n-1):ncol(mydata2)]
Run Code Online (Sandbox Code Playgroud)
有点累赘,但有效.如果您打算定期使用它,可以编写包装函数.
你可以使用这样的东西:
move_to_start <- function(x, to_move) {
x[, c(to_move, setdiff(colnames(x), to_move))]
}
move_to_start(mydata2, c('A', 'B'))
# A B num1 num2
# 1 A B 1 36
# 2 A B 2 37
# 3 A B 3 38
# 4 A B 4 39
# 5 A B 5 40
Run Code Online (Sandbox Code Playgroud)
或者,如果您想将最后n
一列移至开头:
move_to_start <- function(x, n) {
x[, c(tail(seq_len(ncol(x)), n), seq_len(ncol(x) - n))]
}
move_to_start(mydata2, 2)
# A B num1 num2
# 1 A B 1 36
# 2 A B 2 37
# 3 A B 3 38
# 4 A B 4 39
# 5 A B 5 40
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18330 次 |
最近记录: |