data.frame而不破坏列名

Arg*_*Arg 10 r

有没有办法使用data.frame而不破坏列名?

我有以下结构:

$`Canon PowerShot`
[1] 9.997803e-01 9.997318e-01 3.327920e-01 3.327920e-01 9.988220e-01
[6] 4.030871e-05 4.928497e-05

$`Casio Exilim`
[1] 5.322024e-06 9.999646e-01 5.322024e-06 5.322024e-06 9.999646e-01
[6] 5.322024e-06 9.999646e-01

$FinePix
[1] 3.850036e-05 9.998887e-01 6.650074e-02 6.650074e-02 9.998465e-01
[6] 9.998465e-01 4.345598e-05

$`Kodak EasyShare`
[1] 3.548812e-05 9.998604e-01 3.996137e-01 3.996137e-01 9.987841e-01
[6] 3.179604e-05 2.789861e-05

$`Nikon Coolpix series`
[1] 9.156401e-02 9.998091e-01 1.995972e-01 1.995972e-01 9.996341e-01
[6] 7.033741e-05 8.499410e-05
Run Code Online (Sandbox Code Playgroud)

但使用后do.call(data.frame, my_list),我明白了:

  Canon.PowerShot Casio.Exilim      FinePix Kodak.EasyShare
1    9.997803e-01 5.322024e-06 3.850036e-05    3.548812e-05
2    9.997318e-01 9.999646e-01 9.998887e-01    9.998604e-01
3    3.327920e-01 5.322024e-06 6.650074e-02    3.996137e-01
4    3.327920e-01 5.322024e-06 6.650074e-02    3.996137e-01
5    9.988220e-01 9.999646e-01 9.998465e-01    9.987841e-01
6    4.030871e-05 5.322024e-06 9.998465e-01    3.179604e-05
7    4.928497e-05 9.999646e-01 4.345598e-05    2.789861e-05
  Nikon.Coolpix.series
1         9.156401e-02
2         9.998091e-01
3         1.995972e-01
4         1.995972e-01
5         9.996341e-01
6         7.033741e-05
7         8.499410e-05
Run Code Online (Sandbox Code Playgroud)

(注意有.而不是列名中的'')

mne*_*nel 14

您可以R通过设置停止将名称更改为语法有效的名称check.names = FALSE.详情?data.frame请见.

# assuming your data is in a list called my_list
do.call(data.frame, c(my_list, check.names = FALSE))
Run Code Online (Sandbox Code Playgroud)

  • 但是,请注意,您必须在反引号中包装列名,与列表中的名称相同.R尝试默认替换空格的一个原因是它稍后会使一些操作更容易(例如,当使用列名称的tab-completion时). (2认同)

Zac*_*ach 5

R 中的 data.frames 实际上是列表。因此,这也是有效的:

data.frame(my_list, check.names = FALSE)
Run Code Online (Sandbox Code Playgroud)

知道这一点开启了在 data.frames 上使用的可能性lapply,我认为这非常酷:

my_data <- data.frame(my_list, check.names = FALSE)
lapply(my_data, IQR)
Run Code Online (Sandbox Code Playgroud)