我有一个数据框,我想将整行向上移动1个位置。数据框如下所示。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
更新后的版本应该是这样的。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
我试过这个:
a[j,] <- a[j-1,]
但似乎没有用。如何正确地做到这一点。
编辑:它看起来像这样
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
AAA bbb ccc ddd dem ##### new row
5.4 3.9 1.7 0.4 setosa
答案 0 :(得分:1)
以下是data.table
的选项(假设您有6&#34;行&#34;数据集)
library(data.table)
setDT(df)[df[,.I[1:(.N+1)] ,by=(seq_len(nrow(df))-1)%/%5+1]$V1][!.N]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1: 5.1 3.5 1.4 0.2 setosa
#2: 4.9 3.0 1.4 0.2 setosa
#3: 4.7 3.2 1.3 0.2 setosa
#4: 4.6 3.1 1.5 0.2 setosa
#5: 5.0 3.6 1.4 0.2 setosa
#6: NA NA NA NA NA
#7: 5.4 3.9 1.7 0.4 setosa
使用base R
(假设没有&#34;因素&#34;列)
indx <- nrow(df)
df[c(1:(indx - 1),(indx + 1):indx), ] #credit to @David Arenburg
df1[indx,] <- c('AAA', 'bbb', 'ccc', 'ddd', 'dem')
row.names(df1) <- NULL
df1
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5 3.6 1.4 0.2 setosa
#6 AAA bbb ccc ddd dem
#7 5.4 3.9 1.7 0.4 setosa
注意:上面的步骤应该转换来自&#34; numeric&#34;的所有列。到&#34;字符&#34;
答案 1 :(得分:1)
试试这个
data <- iris
data$Species <- as.character(data$Species)
df = data
up_row_num = 3
up_row_val = c("AAA","bbb","ccc","ddd","dem" )
head(data.frame(rbind(df[1:up_row,],up_row_val , df[(up_row+1):nrow(df),]),
row.names =1:(nrow(df)+1)))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 AAA bbb ccc ddd dem
5 4.6 3.1 1.5 0.2 setosa
6 5 3.6 1.4 0.2 setosa
答案 2 :(得分:0)
喜欢这个吗?
df = head(iris)
index = 5
newDF = rbind(df[1:index,], NA, df[(index+1):nrow(df),])
#>newDF
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 NA NA NA NA <NA>
#61 5.4 3.9 1.7 0.4 setosa
根据您的编辑,您可以继续:
df$Species=as.character(df$Species)
newDF = rbind(df[1:index,], c('AAA', 'bbb', 'ccc', 'ddd', 'dem'), df[(index+1):nrow(df),])
但这不是一个好方法,因为你混合了第四个第一列的数字值和字符,将数字值隐含地转换为字符。