【问题标题】:add a new column conditional on another character column in R在 R 中以另一个字符列为条件添加一个新列
【发布时间】:2020-03-26 20:25:29
【问题描述】:

我一直在尝试在 R 中创建一个程序。我想根据另一列的几个类别添加一个新列。 我举个例子:

Column     New Column 
A              1
B              2
C              3
D              4
D              4
A              1

我的问题是如何根据第一列的值(以字符为单位)添加具有特定值的新列。

使用 MUTATE 和 CASE_WHEN 的功能真的很相似。问题是这个函数只考虑了数值,在这种情况下,我想取字符(类别)并在此基础上为新列提供一个特定的值。

【问题讨论】:

  • 问题是什么?你有Column 并且需要New Column?也许match(df1$Column, LETTERS)
  • 嗨@mar​​kus,我的问题是如何添加一个新列,根据第一列的类别(有几个类别)给它一个特定的值

标签: r dataframe tidyr data-management


【解决方案1】:

假设您有一列类别(不仅仅是字母),您可以将其转换为“有序因子”以对类别进行排序,然后再转换为整数。

x <- c("A", "B", "C", "D", "D", "A")
# make the dataframe 
v <- data.frame(x, as.integer(as.ordered(x)))
# 
colnames(v) <- c("Column", "New Column")
v
# output
> v
  Column New Column
1      A          1
2      B          2
3      C          3
4      D          4
5      D          4
6      A          1

【讨论】:

  • 不客气。如果您能更好地投票答案!
【解决方案2】:

如果我理解正确,您想创建一个新列,其中包含与字母对应的数字,其中 1 对应于字母 A 的第一个字母,2 对应于 B,3 对应于 C,依此类推。如果该前提是正确的,那么此代码将为您工作:

说明性数据

set.seed(12)
df <- data.frame(
  Column = sample(LETTERS[1:5],10, replace = T)
)
df
   Column
1       A
2       E
3       E
4       B
5       A
6       A
7       A
8       D
9       A
10      A

解决方案: 将LETTERS 的索引分配给df$COlumn 中的字母,这是一个从1 开始的有序整数序列,它们与LETTERS 中的字母匹配:

df$Newcolumn <- seq(LETTERS)[match(df$Column, LETTERS)]

结果

df
   Column Newcolumn
1       A         1
2       E         5
3       E         5
4       B         2
5       A         1
6       A         1
7       A         1
8       D         4
9       A         1
10      A         1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多