NA行のデータフレームがあります。
df = data.frame(c("classA", NA, "classB"), t(data.frame(rep("A", 5), rep(NA, 5), rep("B", 5))))
rownames(df) <- c(1,2,3)
colnames(df) <- c("class", paste("Year", 1:5, sep = ""))
> df
class Year1 Year2 Year3 Year4 Year5
1 classA A A A A A
2 <NA> <NA> <NA> <NA> <NA> <NA>
3 classB B B B B B
ClassA行とclassB行の間にスペースを確保したかったため、意図的に空の行(NA行)を導入しました。
ここで、2番目の行が空の行のように見えるように、<NA>
を空白で置き換えたいと思います。
私は試した:
df[is.na(df)] <- ""
そして
df[df == "NA"] <- ""
しかし、うまくいきませんでした。
何か案は?ありがとう!
別の選択肢:
df <- sapply(df, as.character) # since your values are `factor`
df[is.na(df)] <- 0
ゼロではなく空白が必要な場合
> df <- sapply(df, as.character)
> df[is.na(df)] <- " "
> df
class Year1 Year2 Year3 Year4 Year5
[1,] "classA" "A" "A" "A" "A" "A"
[2,] " " " " " " " " " " " "
[3,] "classB" "B" "B" "B" "B" "B"
Data.frameが必要な場合は、as.data.drame
> as.data.frame(df)
class Year1 Year2 Year3 Year4 Year5
1 classA A A A A A
2
3 classB B B B B B
この回答は、拡張コメントです。
あなたがやろうとしていることは、私がグッドプラクティスと考えるものではありません。 RはExcelではないので、データ内で視覚的な分離を作成するためにこのようなことを行うと、後で頭痛の種になります。
あなたが本当に視覚的な出力だけに関心があるなら、私は2つの提案を提供できます:
視覚的な分離でデータを表示する場合は、print
にna.print
引数を使用します。
print(df, na.print = "")
# class Year1 Year2 Year3 Year4 Year5
# 1 classA A A A A A
# 2
# 3 classB B B B B B
上記でさえ最良の提案ではないことを理解してください。 data.frame
をlist
に変換して、visualとcontentの両方の分離を取得します。
split(df, df$class)
# $classA
# class Year1 Year2 Year3 Year4 Year5
# 1 classA A A A A A
#
# $classB
# class Year1 Year2 Year3 Year4 Year5
# 3 classB B B B B B