1

私は単純な問題を抱えています。正直なところ、私は答えを見つけようとしました。私は本当にしました。

Rデータフレームにインポートされた.csvファイルがたくさんあります

各データフレームから特定の列(共通の名前)を取得し、それをデータフレームの名前を列名として単一のデータフレームにマージし、各列を使用して箱ひげ図を作成したいと思います。

列は同じ長さではなく、NAが含まれていることがよくあります。

例:データフレーム(最初の行がヘッダー)

データフレーム名Tom

col1    col2 col3 col4
name1   33   44   55
name2   33   NA   55
name3   33   34   55
name4   33   24   55

データフレーム名Bob

col1    col2 col3 col4
name5   33   74   55
name6   33   NA   55
name7   33   32   55

データフレーム名Stu

col1    col2 col3 col4
name8   33   44   55
name9   33   11   55
name10  33   34   55
name11  33   24   55
name12  33   32   55
name13  33   24   5
name14  33   34   55
name15  33   24   5

望ましい結果

Tom  Bob  Stu
44   74   44
NA   NA   11 
34   32   34
24        24
          32
          24
          34
          24

したがって、各データフレームから「col3」(列名は共有)を取得し、col3データのみの新しいデータフレームを生成します。各列には、元のデータフレームの名前として名前が付けられます... Tom、Bob、Stuのボックスプロットを並べて作成します(ただし、おそらくそれを解決できます)。上記の目的の結果では、空のスペースにNAを入れてもかまいません。

4

2 に答える 2

2

data.framesを名前付きリストに入れてください。パッケージllistからHmiscここで便利です

library(Hmisc)
data.list <- llist(Tom, Bob, Stu)
library(reshape2)
# get a long format version of col3
col3 <- melt(lapply(data.list, `[[`, 'col3'))
# the column `L1` contains the names Tom, Bob, Stu

library(ggplot2)
# create the boxplots

ggplot(col3, aes(x=L1, y= value)) + geom_boxplot()

ここに画像の説明を入力してください

于 2012-11-08T01:33:35.497 に答える
1

rbindこれは、3つのデータフレームのそれぞれに識別子列を追加した後、を使用して新しい結合データフレームを作成する基本的なアプローチです。最初に単一のデータフレームを作成せずに箱ひげ図を作成することもできることに注意してください。

Tom = read.table(header=TRUE,
text="col1    col2 col3 col4
name1   33   44   55
name2   33   NA   55
name3   33   34   55
name4   33   24   55")

Bob = read.table(header=TRUE,
text="col1    col2 col3 col4
name5   33   74   55
name6   33   NA   55
name7   33   32   55")

Stu = read.table(header=TRUE,
text="col1    col2 col3 col4
name8   33   44   55
name9   33   11   55
name10  33   34   55
name11  33   24   55
name12  33   32   55
name13  33   24   5
name14  33   34   55
name15  33   24   5")

# Add a new person identifier column to each data frame.
Tom$person = "Tom"
Bob$person = "Bob"
Stu$person = "Stu"

# Combine 3 data frames by row.
dat = rbind(Tom, Bob, Stu)

dat
#      col1 col2 col3 col4 person
# 1   name1   33   44   55    tom
# 2   name2   33   NA   55    tom
# 3   name3   33   34   55    tom
# 4   name4   33   24   55    tom
# 5   name5   33   74   55    bob
# 6   name6   33   NA   55    bob
# 7   name7   33   32   55    bob
# 8   name8   33   44   55    stu
# 9   name9   33   11   55    stu
# 10 name10   33   34   55    stu
# 11 name11   33   24   55    stu
# 12 name12   33   32   55    stu
# 13 name13   33   24    5    stu
# 14 name14   33   34   55    stu
# 15 name15   33   24    5    stu


boxplot(col3 ~ person, data=dat)

# This would also work, without rearranging the data:
boxplot(Tom[, "col3"], Bob[, "col3"], Stu[, "col3"])

# Save to pdf file.
pdf("boxplot_1.pdf", height=5, width=5)
boxplot(col3 ~ person, data=dat, main="Boxplot of three samples.", ylab="col3")
dev.off()

ここに画像の説明を入力してください

于 2012-11-08T01:48:21.460 に答える