【问题标题】:Check number of different columns in a Data Frame in R检查R中数据框中的不同列数
【发布时间】:2020-03-08 23:57:43
【问题描述】:

我正在使用 R 并且有一个数据集,其中每一列是一个生产单位,每一行是一个时间单位。每个变量都是应用于生产单元的轮作序列。

数据集如下所示:

land_use_1 land_use_2 land_use_3 land_use_4 land_use_5 land_use_6
 <chr>      <chr>      <chr>      <chr>      <chr>      <chr>     
1 PAST       PAST       PAST       PAST       SOY       PAST      
2 PAST       PAST       PAST       PAST       SOY       PAST      
3 PAST       PAST       PAST       PAST       PAST      PAST      
4 PAST       PAST       PAST       PAST       PAST      SOY       
5 PAST       PAST       PAST       PAST       CORN      SOY      
6 PAST       PAST       PAST       PAST       CORN      PAST      

我需要检查这些列(作物序列)中有多少是唯一的,因为我无法一一进行(执行类似land_use_1!=land_use_2,执行类似land_use_1!=land_use_3 等),因为有数百个数据集中的列数。

我尝试使用这个命令

dataset %>% unique(, MARGIN=2) %>% dim()

但它返回数据集的相同数量的列,因此不检测哪些列是相同的(我知道有些是相同的,因为我使用其中一些进行了检查)。

我怎样才能有效地做到这一点?

谢谢

【问题讨论】:

  • 我预计只有唯一列的数据框的维度来查看它有多少列。我将唯一定义为轮作(列)中的唯一状态序列。
  • 不,我想选择唯一的列,因为它们中的许多是重复的,因为它们具有相同的作物轮作(状态序列)。例如,如果我执行 land_use_1==land_use_2 它返回 TRUE,因为它们使用相同的旋转,但如果我执行 land_use_1==land_use_6 它返回 FALSE,因为旋转不同。我想计算不同轮作的次数。

标签: r dataframe unique


【解决方案1】:

用途:

 unique(as.list(dataset))

这会将数据框强制转换为列列表,然后计算列表中唯一元素的数量。

例如:

> d <- data.frame(a=c(1,1,0) , b=c(1,1,0), c=c(1,0,1))
> unique(as.list(d))
[[1]]
[1] 1 1 0

[[2]]
[1] 1 0 1

> length(unique(as.list(d)))
[1] 2

【讨论】:

  • @Augusto 它正在计算唯一列的数量。我将编辑示例以使其更清晰。
  • 我检查了你的解决方案,正是我想要的,谢谢!
【解决方案2】:

你可以使用data.table函数duplicated

library(data.table)
DT<-data.table(yourdataframe)

DT$duplicated_rows<- duplicate(DT)

这里是一个可重复的例子:

DT <- data.table(A = rep(1:3, each=4), B = rep(1:4, each=3),
                  C = rep(1:2, 6), key = "A,B")
DT
    A B C
 1: 1 1 1
 2: 1 1 2
 3: 1 1 1
 4: 1 2 2
 5: 2 2 1
 6: 2 2 2
 7: 2 3 1
 8: 2 3 2
 9: 3 3 1
10: 3 4 2
11: 3 4 1
12: 3 4 2
duplicated(DT)
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
> 

【讨论】:

  • 谢谢,它似乎适用于“复制”功能并转置我的数据框。这里是命令 DT %>% t() %>% duplicated() %>% sum,我可以看到重复列的数量,因此有多少唯一列。
【解决方案3】:

这是一个生成唯一列名称列表和唯一列总数的解决方案:

library(tidyverse)

df <- data.frame(land_use_1 = rep("PAST", 6),
                 land_use_2 = rep("PAST", 6),
                 land_use_3 = rep("PAST", 6),
                 land_use_4 = rep("PAST", 6),
                 land_use_5 = c("SOY", "SOY", "PAST", "PAST", "CORN", "CORN"),
                 land_use_6 = c("PAST", "PAST", "PAST", "SOY", "SOY", "PAST"))

unique_vars <- data.frame(t(df)) %>%
  rownames_to_column() %>%
  distinct_at(vars(-rowname), .keep_all = T)

unique_vars$rowname
# [1] [1] "land_use_1" "land_use_5" "land_use_6"

length(unique_vars$rowname)
# [1] 3

【讨论】:

    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    相关资源
    最近更新 更多