私は前回の投稿で2つの別々の質問をし、そのうちの1つに非常に巧妙な覗き見で非常にすばやく答えてもらいました。
明らかに、私はまだデータフレームリストに頭を包んだり、ラップしたりすることはできません!
元の質問と名前が変更された質問のcsvリストがあります。この例では、Qsデータフレームに従ってQ.1aをQ.1に更新するコードを記述しようとしています。
df1 <- data.frame("ID" = 1, "Q.1" = 2, Q1.1 = 3)
df2 <- data.frame("ID." = 2, "Q.1a" = 3, Q1.1 = 4)
dflist <- lapply(ls(), function(x) if (class(get(x)) == "data.frame") get(x))
dflist <- Filter(length, dflist)
Qs <- data.frame("Original.Name" = "Q.1a", "New.Name" = "Q.1")
テーブルは次のようになります。Qsテーブルに従ってQ.1aを更新したい
ID Q.1a Q1.1
1 1 2 3
ID. Q.1 Q1.1
1 2 3 4
Original.Name New.name
1 Q.1a Q.1
現在エラーでいっぱいの質問の名前を変更するために私が書き込もうとしているコードは、パイプがそこにあるはずではないと確信しています!
lapply(dflist, function(x) {
names(x) <- names (x) %in%
Qs$Original.name = Qs$New.name[match(names(x)[names(x) %in% Qs$Original.name],
Qs$Original.name)]
})
誰かが私を正しい方向に向けることができますか?本当にありがとう。
上記の元の例のQ1aがQ1に更新された場合の期待される出力を示すように編集されました。
ID Q.1 Q1.1
1 1 2 3
ID. Q.1 Q1.1
1 2 3 4
理想的には、Qsテーブルの列名を一致させて置き換えることができるようにしたいです。元の列名が新しい列名に置き換えられました
ifelse
withmatch
を使用して、列の新しい名前を取得できます。
dflist <- lapply(dflist, function(x) {
names(x) <- ifelse(names(x) %in% Qs$Original.Name,
Qs$New.Name[match(names(x), Qs$Original.Name)], names(x))
x
})
dflist
#[[1]]
# ID Q.1 Q1.1
#1 1 2 3
#[[2]]
# ID. Q.1 Q1.1
#1 2 3 4
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加