我有一個數據框。在它COL3的價值觀和COL4是錯行由1底行的值應該是前行中,最上面一行應在第二等從最後一行復制值並粘貼到第一行r
目前
col1 col2 col3 col4
a b c d
e f g h
i j k l
應該
col1 col2 col3 col4
a b k l
e f c d
i j g h
我怎麼在COL3和COL4僅移動值由一個打倒,最後成爲第一個?
我有一個數據框。在它COL3的價值觀和COL4是錯行由1底行的值應該是前行中,最上面一行應在第二等從最後一行復制值並粘貼到第一行r
目前
col1 col2 col3 col4
a b c d
e f g h
i j k l
應該
col1 col2 col3 col4
a b k l
e f c d
i j g h
我怎麼在COL3和COL4僅移動值由一個打倒,最後成爲第一個?
假設d
是你data.frame:
d$col3 <- c(d$col3[length(d$col3)], d$col3[-length(d$col3)])
d$col4 <- c(d$col4[length(d$col4)], d$col4[-length(d$col4)])
試試這個
df <- data.frame(col1=c("a", "e", "i"),
col2=c("b", "f", "j"),
col3=c("c", "g", "k"),
col4=c("d", "h", "l"))
df <- cbind(df[, 1:2], df[c(dim(df)[1], 1:(dim(df)[1]-1)), 3:4])
使用的字符,而不是因素造成的數據幀:
df <- data.frame(col1=c("a", "e", "i"),
col2=c("b", "f", "j"),
col3=c("c", "g", "k"),
col4=c("d", "h", "l"), stringsAsFactors=FALSE)
df$col3 <- c(df$col3[nrow(df)], df$col3[1:(nrow(df)-1)])
df$col4 <- c(df$col4[nrow(df)], df$col4[1:(nrow(df)-1)])
輸出:
> df
col1 col2 col3 col4
1 a b k l
2 e f c d
3 i j g h
假設DF是你的數據框,你可以使用一個for循環
temp3 = df[nrow(df),3]
temp4 = df[nrow(df),4]
for(i in 2:nrow(df)){
df[(i,3] = df[((i - 1),3]
df[(i,4] = df[((i - 1),4]
}
df[1, 3] = temp3
df[1, 4] = temp4
我傾向於使用dplyr的mutate_each
和summarise_each
功能相同的功能(S)適用於多列。這裏是你如何能有一個自定義的「交換」功能接近它更好的可讀性:
library(dplyr)
定義一個函數:
swap <- function(x) c(last(x), head(x, -1L))
現在你可以使用這個自定義函數裏面的「mutate_each」,並指定列要功能適用於:
mutate_each(df, funs(swap), col3, col4)
# col1 col2 col3 col4
#1 a b k l
#2 e f c d
#3 i j g h
如果你喜歡基礎R,你可以做到這一點SIM卡ilarly,使用稍微改性的功能「swap2」和「lapply」到函數應用到多個列:
# define the function:
swap2 <- function(x) c(tail(x, 1L), head(x, -1L))
# define the columns you want to apply the function to:
cols <- c("col3", "col4")
# Finally, lapply over the data:
df[cols] <- lapply(df[cols], swap2)
數據:
> dput(df)
structure(list(col1 = c("a", "e", "i"), col2 = c("b", "f", "j"
), col3 = c("c", "g", "k"), col4 = c("d", "h", "l")), .Names = c("col1",
"col2", "col3", "col4"), class = "data.frame", row.names = c(NA,
-3L))
此代碼似乎沒有在給定的採樣數據題。 – 2015-03-31 07:41:24
@TimBiegeleisen,代碼中只有一個錯字... – Cath 2015-03-31 07:56:17
@Thomas,希望你不要介意輸入錯誤 – Cath 2015-03-31 07:56:39