R-データフレーム内の行変数を別の行の変数に置き換えます

島内

以下のreprexに似ていますが、100以上の列を持つデータフレームのリストがあります。

# reproducible example
df <- data.frame(
  Name = c("Name1", "Name2", "Name3", "Name4", "Name5"),
  Date = c("2018-01-01", "2018-01-02"),
  Value1 = c(rnorm(5, 2, 3), rnorm(5, 4, 1)),
  Value2 = c(rnorm(5, 12, 4), rnorm(5, 5, 8)),
  Value3 = c(rnorm(5, 22, 13), rnorm(5, 7, 10))
)

# transform data frame into list
df <- split(df, df$Name)

リスト内のデータフレームごとに、最後の行を前の1行の値に置き換えたいと思います。例えば、リスト内の各データフレームのために、私は交換したい[2, 3:5][1, 3:5]

> tail(df[["Name1"]], n = 2)
   Name       Date    Value1    Value2    Value3
1 Name1 2018-01-01 0.9184539 15.658510 29.219707
2 Name1 2018-01-02 3.8875463  3.628546  9.777399

データフレームをリストに変換することがこれを行うための最良の方法であるかどうかはわかりませんので、他の提案を歓迎します。以下に概説するようにこれに取り組んでみましたが、データフレームの最後の行を最後から2番目の行に置き換えるだけです。

私の試み

# reproducible example
df <- data.frame(
  Name = c("Name1", "Name2", "Name3", "Name4", "Name5"),
  Date = c("2018-01-01", "2018-01-02"),
  Value1 = c(rnorm(5, 2, 3), rnorm(5, 4, 1)),
  Value2 = c(rnorm(5, 12, 4), rnorm(5, 5, 8)),
  Value3 = c(rnorm(5, 22, 13), rnorm(5, 7, 10))
)

# arrange by Name and Date
df <- df %>% dplyr::arrange(Name, Date)

# attempt to replace 
df[length(df$Name), c(3:5)] <- df[length(df$Name)-1, c(3:5)]

# result
tail(df, n = 4)

> tail(df, n = 4)
    Name       Date    Value1    Value2    Value3
7  Name4 2018-01-01  3.242383 -11.44217 -1.215688
8  Name4 2018-01-02 -4.042093  18.18184  1.544271
9  Name5 2018-01-01 -1.930195  13.18662 18.889372
10 Name5 2018-01-02 -1.930195  13.18662 18.889372
www

tidyverseソリューション。リストへの変換は必要ないと思います。df例のデータフレームです。最後の行をに置き換えてNAから、を使用fillして前の行を埋めることができます。

library(tidyverse)

df2 <- df %>%
  group_by(Name) %>%
  mutate_at(vars(starts_with("Value")), 
            funs(ifelse(row_number() == max(row_number()), NA, .))) %>%
  fill(starts_with("Value")) %>%
  ungroup()
df2
# # A tibble: 10 x 5
#    Name  Date       Value1 Value2 Value3
#    <fct> <fct>       <dbl>  <dbl>  <dbl>
#  1 Name1 2018-01-01  1.35   14.5   34.2 
#  2 Name1 2018-01-02  1.35   14.5   34.2 
#  3 Name2 2018-01-02  2.42    4.43  19.5 
#  4 Name2 2018-01-01  2.42    4.43  19.5 
#  5 Name3 2018-01-01  4.60   14.1   15.8 
#  6 Name3 2018-01-02  4.60   14.1   15.8 
#  7 Name4 2018-01-02  6.36   11.4    9.40
#  8 Name4 2018-01-01  6.36   11.4    9.40
#  9 Name5 2018-01-01  0.214   8.34  33.8 
# 10 Name5 2018-01-02  0.214   8.34  33.8 

以下はさらに良いかもしれません。これはfill関数を使用せず、行の順序も変更しません。

df2 <- df %>%
  group_by(Name) %>%
  mutate_at(vars(starts_with("Value")), 
            funs(ifelse(row_number() == max(row_number()), 
                        nth(., n = max(row_number()) - 1),
                        .))) %>%
  ungroup()
df2
# # A tibble: 10 x 5
#    Name  Date       Value1 Value2 Value3
#    <fct> <fct>       <dbl>  <dbl>  <dbl>
#  1 Name1 2018-01-01   4.40  13.5   28.0 
#  2 Name2 2018-01-02   1.82   8.23  20.9 
#  3 Name3 2018-01-01   1.07  16.9    7.50
#  4 Name4 2018-01-02   1.09   8.05  14.4 
#  5 Name5 2018-01-01   1.17  11.6   24.0 
#  6 Name1 2018-01-02   4.40  13.5   28.0 
#  7 Name2 2018-01-01   1.82   8.23  20.9 
#  8 Name3 2018-01-02   1.07  16.9    7.50
#  9 Name4 2018-01-01   1.09   8.05  14.4 
# 10 Name5 2018-01-02   1.17  11.6   24.0 

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

行の値をRの別のデータフレームの特定の値に置き換えます

分類Dev

rデータフレーム列の複数の文字列を別のデータフレームの列の複数の文字列に置き換えます

分類Dev

R:行/列を使用してデータフレームの値を別の値に置き換えます

分類Dev

別の共通変数の値が等しい場合にのみ、あるデータフレームの値を別のデータフレームの値に置き換えるR関数はありますか?

分類Dev

Rは別のデータフレームの複数の列の値を置き換えます

分類Dev

あるデータフレームの行をRの別のデータフレームに置き換える方法はありますか?

分類Dev

R:データフレームの複数の列の複数の値をNAに置き換えます

分類Dev

R:データフレームの複数の列の複数の値を別の列の値に置き換えます

分類Dev

データフレームの複数の列をrのインデックスに置き換えます

分類Dev

データフレーム列の値をRのユーザー定義関数に置き換えます

分類Dev

データフレーム内のNAをRの同じ行の前の値に置き換える方法

分類Dev

rのデータフレームの値を行名に置き換える

分類Dev

Rデータフレーム:複数行の値をリストに変換します

分類Dev

適用関数を使用して、データフレームの月に基づく値をrの別の列の値に置き換えます

分類Dev

空の列をrのsparkデータフレームの別の列の値に置き換えます

分類Dev

データフレーム内の数値のすべてのインスタンスを文字列Rに置き換えます

分類Dev

R列名をマップ関数のデータフレーム名に置き換えます

分類Dev

2つの列にまたがる共通の文字列を、Rのデータフレーム内の別の列の文字列に置き換えます

分類Dev

データの行をRのデータフレームに変換する

分類Dev

データフレームの-InfをRのNAに置き換えます

分類Dev

R:リスト内のデータフレームの因数を数値に変換します

分類Dev

R:別の変数に応じてデータフレームに行を追加する

分類Dev

Rのデータフレーム内のNAを条件付きで文字列に置き換えます

分類Dev

NAまたはRデータフレーム内の別の変数に応じた数値を使用して数値変数を作成する方法

分類Dev

各行の特定の数の要素(行ごとに異なる)をRデータフレームのゼロ/ NAに置き換える方法は?

分類Dev

Rのデータフレーム内の複数の変数にわたってt検定とカイ2乗検定を自動的に実行します

分類Dev

R:データフレームに複数の行(変数番号)を挿入します

分類Dev

データフレームの値をマージして、Rの別のデータフレームの値に置き換えます

分類Dev

Rの別のデータフレーム内の列に基づいてデータフレームから変数を削除します

Related 関連記事

  1. 1

    行の値をRの別のデータフレームの特定の値に置き換えます

  2. 2

    rデータフレーム列の複数の文字列を別のデータフレームの列の複数の文字列に置き換えます

  3. 3

    R:行/列を使用してデータフレームの値を別の値に置き換えます

  4. 4

    別の共通変数の値が等しい場合にのみ、あるデータフレームの値を別のデータフレームの値に置き換えるR関数はありますか?

  5. 5

    Rは別のデータフレームの複数の列の値を置き換えます

  6. 6

    あるデータフレームの行をRの別のデータフレームに置き換える方法はありますか?

  7. 7

    R:データフレームの複数の列の複数の値をNAに置き換えます

  8. 8

    R:データフレームの複数の列の複数の値を別の列の値に置き換えます

  9. 9

    データフレームの複数の列をrのインデックスに置き換えます

  10. 10

    データフレーム列の値をRのユーザー定義関数に置き換えます

  11. 11

    データフレーム内のNAをRの同じ行の前の値に置き換える方法

  12. 12

    rのデータフレームの値を行名に置き換える

  13. 13

    Rデータフレーム:複数行の値をリストに変換します

  14. 14

    適用関数を使用して、データフレームの月に基づく値をrの別の列の値に置き換えます

  15. 15

    空の列をrのsparkデータフレームの別の列の値に置き換えます

  16. 16

    データフレーム内の数値のすべてのインスタンスを文字列Rに置き換えます

  17. 17

    R列名をマップ関数のデータフレーム名に置き換えます

  18. 18

    2つの列にまたがる共通の文字列を、Rのデータフレーム内の別の列の文字列に置き換えます

  19. 19

    データの行をRのデータフレームに変換する

  20. 20

    データフレームの-InfをRのNAに置き換えます

  21. 21

    R:リスト内のデータフレームの因数を数値に変換します

  22. 22

    R:別の変数に応じてデータフレームに行を追加する

  23. 23

    Rのデータフレーム内のNAを条件付きで文字列に置き換えます

  24. 24

    NAまたはRデータフレーム内の別の変数に応じた数値を使用して数値変数を作成する方法

  25. 25

    各行の特定の数の要素(行ごとに異なる)をRデータフレームのゼロ/ NAに置き換える方法は?

  26. 26

    Rのデータフレーム内の複数の変数にわたってt検定とカイ2乗検定を自動的に実行します

  27. 27

    R:データフレームに複数の行(変数番号)を挿入します

  28. 28

    データフレームの値をマージして、Rの別のデータフレームの値に置き換えます

  29. 29

    Rの別のデータフレーム内の列に基づいてデータフレームから変数を削除します

ホットタグ

アーカイブ