【问题标题】:Slicing multiple columns in R [duplicate]在R中切片多列[重复]
【发布时间】:2019-10-08 22:54:16
【问题描述】:

在 python 中使用pandas 对列进行切片,其中data 是数据集,'pickup_latitude 是行后的列

data = data[(data['pickup_latitude']<=90) & (data['pickup_latitude']>=-90)]

R 中的上述内容和具有不同值范围的多列的等价物是什么?

【问题讨论】:

  • 同样的事情,但在末尾添加一个逗号以表明您正在索引行:data = data[(data['pickup_latitude']&lt;=90) &amp; (data['pickup_latitude']&gt;=-90), ]
  • 或使用subset 命令。

标签: r dataframe subset slice data-analysis


【解决方案1】:

同样的事情也可以,但您需要在末尾添加一个逗号以表明您正在索引行:

data = data[(data['pickup_latitude']<=90) & (data['pickup_latitude']>=-90), ]

例如关于内置mtcars数据:

> mt = mtcars[mtcars['mpg'] <= 20 & mtcars['mpg'] >= 15, ]
> mt
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C         17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE        16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL        17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC       15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Dodge Challenger  15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin       15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Pontiac Firebird  19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Ford Pantera L    15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino      19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora     15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

一点解释:在 R 中,数据框是列的列表。如果您使用带有 single 参数的方括号,则假设您正在对列进行子集化,如 mtcars['mpg']mtcars 的 mpg 列,data['pickup_latitude']data 的pickup_latitude 列.如果要索引行,则需要data[rows, columns] 形式的参数,但如果缺少rowscolumns,则将假定所有参数。所以mtcars[1:3, ]mtcars 的前三行,包含所有列。 mtcars[mtcars['mpg'] &lt;= 20 &amp; mtcars['mpg'] &gt;= 15, ]mtcars 中符合逻辑要求的行,所有列。

还有一些方便的功能可以让您避免重新输入 data$data[,例如,这会做同样的事情:

subset(data, pickup_latitude <=90 & pickup_latitude >=-90)

【讨论】:

  • 如何对多列进行切片,就好像mpg 已在上面切片,我想切片cyldisphpdratwt,@987654344 @也一起
  • 你的意思是只选择那些列吗? mtcars[..same condition.., c("cyl", "disp", ...)]。或者你的意思是你有额外的条件?只需将它们与&amp; 粘贴在一起即可:mtcars[mtcars['cyl'] == 4 &amp; mtcars['disp'] &lt; 300 &amp; ..., ] 在尽可能多的列上使用尽可能多的条件。
  • 遇到mpg between 18 to 20,cyl between 6 to 10,disp between 10 to 50这样的情况怎么办?即具有不同值范围的所有列。 @Gregor
  • 把它们粘在一起:subset(mtcars, mpg &gt;= 18 &amp; mpg &lt;= 20 &amp; cyl &gt;= 6 &amp; cyl &lt;= 10 &amp; disp &gt;= 100 &amp; disp &lt;= 300)。您可以使用 &amp;| 或...
  • 谢谢@Gregor 这行得通,我在两个不同的列之间使用| 而不是&amp; 进行切片。
猜你喜欢
  • 2021-01-19
  • 1970-01-01
  • 2015-05-09
  • 2021-09-07
  • 2023-03-28
  • 1970-01-01
  • 2013-06-20
  • 2013-04-28
  • 1970-01-01
相关资源
最近更新 更多