如何在R中找到带有2个不同标签的通用数据?

时间:2017-09-26 06:06:35

标签: r

对R来说很新。我的数据包含客户ID和类别列。客户ID是数字,类别是文本。 客户ID可以属于A类或B类或两者。我的疑问:

  1. 客户ID可以是A / B / Both。如何过滤仅属于A而不属于其他2个段的客户ID?
  2. 在Both段中,我怎么知道客户先从A或B购买过?
  3. 请帮忙。数据看起来像这样

    data.frame
    (date = c("24 aug", "19 Aug", "15 july", "31 aug", "10 Aug", "12 Aug"), 
    id = c(1000003007, 1000008006, 1000008006, 1000008006, 1000009009, 1000010004), 
    customer = c("A", "B"))
    

    Sample Data

2 个答案:

答案 0 :(得分:0)

回答你的第一个问题:

您可以根据条件过滤数据框。 R中用于选择数据帧的特定rowscolumns的通用代码结构如下:

假设您的数据框对象被称为df

df <- data.frame(date = c("24 aug", "19 Aug", "15 july", "31 aug", "10 Aug", "12 Aug"), 
                 customer_id = c(1000003007, 1000008006, 1000008006, 1000008006, 1000009009, 1000010004), 
                 Category = c("A", "B"))

df[rows, columns]

您可以使用数字按数据框中的位置调用行和列。

df[1, ]

    date customer_id Category
1 24 aug  1000003007        A

将选择第一行和所有列。

df[, 1]

[1] 24 aug  19 Aug  15 july 31 aug  10 Aug  12 Aug 
Levels: 10 Aug 12 Aug 15 july 19 Aug 24 aug 31 aug

将选择所有行,但仅选择第一列。您还可以按名称选择列:

df[, "customer_id"]

[1] 1000003007 1000008006 1000008006 1000008006 1000009009 1000010004

将选择所有行,但仅选择列customer_id。这也可以使用df$customer_id完成。

要使用条件选择行,请在逗号前面的空格中插入条件:

df[df$Category == "A",]

     date customer_id Category
1  24 aug  1000003007        A
3 15 july  1000008006        A
5  10 Aug  1000009009        A

将选择所有列,但仅选择满足条件column "Category" is equal to "A"的行。

我无法回答您的第二个问题,因为您的数据示例不包含df$Category == "Both"行。

答案 1 :(得分:0)

假设df是您的数据框。

df <- data.frame(date = c("24 aug", "19 Aug", "15 july", "31 aug", "10 Aug", "12 Aug"), id = c(1000003007, 1000008006, 1000008006, 1000008006, 1000009009, 1000010004), customer = c("A", "B"))

您可以使用subset在两个查询中获得结果。

查询1:

subset(df, customer == "A")

     date      id       customer
1  24   aug 1000003007      A
3  15   july 1000008006     A
5  10   Aug 1000009009      A

如果您只想要客户ID:

subset(df$id, df$customer == "A")
[1] 1000003007 1000008006 1000009009

查询2:

subset(df, customer == "A" | customer == "B")

     date         id       customer
 1   24 aug   1000003007        A
 2   19 Aug   1000008006        B
 3   15 july   1000008006        A
 4   31 aug   1000008006        B
 5   10 Aug   1000009009        A
 6   12 Aug   1000010004        B

如果您只想要客户ID:

subset(df$id, df$customer == "A" | df$customer == "B")
[1] 1000003007 1000008006 1000008006 1000008006 1000009009 1000010004