小编Dar*_*sai的帖子

检查每行单调递增

我有一个数据框如下:

   COL_1 COL_2 COL_3 COL_4 COL_5 COL_6
   <int> <int> <int> <int> <int> <int>
 1     1     1     1     1     1     1
 2     1     1     1     1     1     2
 3     1     1     1     1     1     3
 4     1     1     1     1     1     4
 5     1     2     1     1     1     5
 6     1     1     1     1     1     6
 7     1     3     4     5     6     7
 8     1     1     1     1     1     8
 9     1     1     9     1     1     9
10     1     3     5 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

13
推荐指数
4
解决办法
1494
查看次数

匹配行和列名称中包含的数字的矩阵计算

我有一个矩阵,其中包含几个国家的行业经济信息。我想做一系列取决于矩阵中元素的位置和相应的列/行名称的计算。

行/列名称包含三个字母的国家/地区代码,后跟行业编号。行名称和列名称相同。

计算如下:

  1. 对于连续的每个元素,都会有一个匹配的国家和行业
  2. 保持产业组合不变,将纯同一国家的产业与比赛内其他国家的相同产业相乘。

我将举一个简单的例子,尽管我的数据比这个例子大得多。

假设我有矩阵a

set.seed(10)

a <- matrix(sample(36) , nrow = 6)
colnames(a) <- rownames(a) <- paste( rep(c("aaa" , "bbb" , "ccc") , each = 2), rep(c(1:2) , times = 3))
Run Code Online (Sandbox Code Playgroud)

给予:

      aaa 1 aaa 2 bbb 1 bbb 2 ccc 1 ccc 2
aaa 1     9    19    26     6     5    21
aaa 2    10    24     2    30    36    27
bbb 1    12    15    13    11    20    16
bbb 2     8    28    33    18    34    17 …
Run Code Online (Sandbox Code Playgroud)

r matrix

12
推荐指数
3
解决办法
301
查看次数

在r中创建备用系列

我有一个名单-0.5,-0.6,0.7,1,1.5,3,-5,我想将它作为排序3,-5,1.5,-0.6,1,-0.5,0.7.换句话说,我想将列表分为正面和负面列表,然后将它们从最大到最小排序,但是交替排序.

我怎样才能做到这一点?

sorting r

9
推荐指数
2
解决办法
345
查看次数

将购物清单分为多列

我有一个像这样的购物清单数据:

df <- data.frame(id = 1:5, item = c("apple2milk5", "milk1", "juice3apple5", "egg10juice1", "egg8milk2"), stringsAsFactors = F)

#   id         item
# 1  1  apple2milk5
# 2  2        milk1
# 3  3 juice3apple5
# 4  4  egg10juice1
# 5  5    egg8milk2
Run Code Online (Sandbox Code Playgroud)

我想将变量item分成多列,并记录货物后面的数字。我遇到的问题是每个人购买的商品都不一样,因此我无法使用tidyr::separate()或其他类似功能来解决它。我期望的是:

#   id apple milk  juice egg  
# 1  1 2     5     NA    NA   
# 2  2 NA    1     NA    NA   
# 3  3 5     NA    3     NA   
# 4  4 NA    NA    1     10   
# 5 …
Run Code Online (Sandbox Code Playgroud)

r tidyr

8
推荐指数
1
解决办法
138
查看次数

以智能方式将所有列一一比较

有变量x,,yz我想过滤掉其中任何一个没有巨大差距的(差距小于5%)。下面的代码可以模拟,但是如果我想要更多的变量进行比较,代码就会很无聊。有什么聪明的方法吗?谢谢!

library(tidyverse)

diamonds %>%
  select(x, y, z) %>%
  filter(abs((x - y)/ max(x, y)) < 0.05,
         abs((x - z)/ max(x, z)) < 0.05,
         abs((y - z)/ max(y, z)) < 0.05)
Run Code Online (Sandbox Code Playgroud)

r filter dplyr

8
推荐指数
4
解决办法
1038
查看次数

获取每行中某个值之前的数字

我在任何地方都找不到这个。我希望能够创建一个列,该列使用包含“end”的列之前的列中的数据。

我什至可能没有解释得那么好。

例如:

df =

V1     V2  V3     V4     V5   V6
 0  start   1    end  ended    0
 3    end   0  start      5    0
 2  start   3   next      6  end
Run Code Online (Sandbox Code Playgroud)

我希望新列是下一列“结束”之前的数字。

V1     V2  V3     V4     V5   V6  end_num
 0  start   1    end  ended    0        1
 3    end   0  start      5    0        3
 2  start   3   next      6  end        6
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

6
推荐指数
2
解决办法
213
查看次数

如何比较两个数据帧并使用 mutate across 添加新列?

我正在尝试比较两个不同大小的数据帧,并使用 mutate across 添加新列。

这是我的数据框。

df <- data.frame(No = c(1,2,3,4),
                 s_Ca = c(NA, 250, NA, 500),
                 s_P = c(300, NA, NA, NA),
                 s_Fe = c(NA, 10, NA, NA),
                 s_K = c(NA, NA, NA, 300))
Run Code Online (Sandbox Code Playgroud)

我想将它与下面的数据框进行比较。

intake <- data.frame(cutoff = c(210, 210, 3.6, 1050),
                     nut = c("Ca", "P", "Fe", "K"))
Run Code Online (Sandbox Code Playgroud)

Ca如果in的值df大于Cain的截止值intake,那么我将向新列添加 1 s_Ca_cat,否则添加 0。

P如果in的值df大于Pin的截止值intake,我将在新列中添加 2 s_P_cat,依此类推。

也就是说,我想要的结果是这样的

df_cat <- data.frame(No = c(1,2,3,4),
                     s_Ca_cat = …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

6
推荐指数
1
解决办法
79
查看次数

转换多列类

我认为这是一个简单的问题,但我还没有找到合适的解决方案.首先是一组简化数据:

df <- as.data.frame(matrix(1:20, 5, 4))
str(df)

# 'data.frame': 5 obs. of  4 variables:
#  $ V1: int  1 2 3 4 5
#  $ V2: int  6 7 8 9 10
#  $ V3: int  11 12 13 14 15
#  $ V4: int  16 17 18 19 20
Run Code Online (Sandbox Code Playgroud)

我们可以看到所有类都是整数.我想要实现的是将4个类分别转换为整数,数字,字符因子.当然,我可以使用

df$V1 <- as.XXX(df$V1)
Run Code Online (Sandbox Code Playgroud)

对于每一列,但我认为这是低效的.

预期产出

# 'data.frame': 5 obs. of  4 variables:
#  $ V1: int  1 2 3 4 5
#  $ V2: num …
Run Code Online (Sandbox Code Playgroud)

r dataframe

5
推荐指数
1
解决办法
115
查看次数

pheatmap 中有一些奇怪的东西(一个错误?)

可重现的数据:

data(crabs, package = "MASS")
df <- crabs[-(1:3)]
set.seed(12345)
df$GRP <- kmeans(df, 4)$cluster
df.order <- dplyr::arrange(df, GRP)
Run Code Online (Sandbox Code Playgroud)

数据说明:

df有 5 个数值变量。我根据这 5 个属性进行了 K-means 算法,并生成了一个GRP具有 4 个级别的新分类变量。接下来,我订购了它GRP并命名了它df.order


我做了什么pheatmap

## 5 numerical variables for coloring
colormat <- df.order[c("FL", "RW", "CL", "CW", "BD")]

## Specify the annotation variable `GRP` shown on left side of the heatmap
ann_row <- df.order["GRP"]

## gap indices
gapRow <- cumsum(table(ann_row$GRP))

library(pheatmap)
pheatmap(colormat, cluster_rows = F, show_rownames = F, …
Run Code Online (Sandbox Code Playgroud)

r heatmap pheatmap

5
推荐指数
1
解决办法
1426
查看次数

如何比较 R 中的两个列表

我有两个要比较的列表。我想看看列表中每个元素的值是否相等。

> m1
[[1]]
integer(0)

[[2]]
[1] 3 4

[[3]]
integer(0)

[[4]]
[1] 1

[[5]]
[1] 2 3 4

> m3
[[1]]
[1] 3

[[2]]
[1] 1 4

[[3]]
[1] 2

[[4]]
[1] 3

[[5]]
[1] 1 4
Run Code Online (Sandbox Code Playgroud)

我期望这样的结果:

> Result
[[1]]
[1]
FALSE

[[2]]
[1] 
FALSE TRUE

[[3]]
[1]
FALSE

[[4]]
[1]
FALSE

[[5]]
[1] 
FALSE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)

如果我尝试申请m1[1] == m3[1]或类似,我会收到如下消息

m1 == m3 中的错误:未实现这些类型的比较。

这么简单的事我都做不到!提前感谢您的帮助。

数据

> m1
[[1]]
integer(0)

[[2]]
[1] 3 4

[[3]]
integer(0) …
Run Code Online (Sandbox Code Playgroud)

compare r list

5
推荐指数
1
解决办法
4361
查看次数

标签 统计

r ×10

dataframe ×4

dplyr ×4

compare ×1

filter ×1

heatmap ×1

list ×1

matrix ×1

pheatmap ×1

sorting ×1

tidyr ×1