R中的数据操作:使用字符串

时间:2016-09-30 04:33:22

标签: r

我需要用相应的字符串替换列中的值。在我的搜索中,我遇到了类似的问题,其答案与我正在寻找的内容非常匹配,但完全不符合我的需求。由于我是初学者,如果你能解释这段代码的工作原理会有所帮助。

我想从像这样的数据集

    A   B    C    D

1   1   64   20   1
2   2   64   20   3
3   3   64   20   3
4   4   64   20   1
5   5   64   20   2

对于使用键1 = Apple,2 = Blastoise,3 = Carousel

的数据集
    A   B    C    D

1   1   64   20   Apple
2   2   64   20   Carousel
3   3   64   20   Carousel
4   4   64   20   Apple
5   5   64   20   Blastoise

我知道你可以使用像

这样的东西
df$D <- "label"

更改列的值。

但是,我不知道如何获得&#34;标签&#34;部分匹配相应的值。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

此处的一个baseR选项是使用>>> L = [[1,2], [3,4], [5,6,7]] >>> my_len_dict = {} >>> for item in L: ... item_length = len(item) ... if item_length in my_len_dict: ... my_len_dict[item_length] += 1 ... else: ... my_len_dict[item_length] = 1 ... >>> my_len_dict {2: 2, 3: 1} 。首先,创建一个数据框,将merge列值映射到标签:

D

然后进行合并:

labels <- data.frame(D=c(1,2,3), label=c("Apple", "Blastoise", "Carousel"))

如果要保留原始列顺序,请使用:

result <- merge(df, labels, by="D")

result
  D A  B  C     label
1 1 1 64 20     Apple
2 1 4 64 20     Apple
3 2 5 64 20 Blastoise
4 3 2 64 20  Carousel
5 3 3 64 20  Carousel

答案 1 :(得分:1)

有几种方法可以做到这一点:

将D列用作索引:

df$D是一个包含整数1,2和3的向量。您必须将它们视为索引的集合。例如:

df$D = c(1,3,3,1,2)

另一个向量包含名称:

v_names = c("Apple","Blastoise","Carousel")

如果您使用df$D作为v_names的索引,会发生什么?

v_names[df$D]
[1] "Apple"     "Carousel"  "Carousel"  "Apple"     "Blastoise"

您将获得一个与索引集合(df$D)长度相同的向量,其名称将替换这些索引值。

使用ifelse:

这种方式需要与名称一样多的ifelse,因此不建议这样做。

ifelse(df$D==1,"Apple",ifelse(df$D==2,"Blastoise","Carousel"))
[1] "Apple"     "Carousel"  "Carousel"  "Apple"     "Blastoise"

如您所见,它们是嵌套的ifelse。如果有三种以上的不同情况,则难以阅读。

使用因素

如果您将列转换为因子,则使用名称更改级别:

df$D = as.factor(df$D)
levels(df$D) = c("Apple","Blastoise","Carousel")

> df$D
[1] Apple     Carousel  Carousel  Apple     Blastoise
Levels: Apple Blastoise Carousel

这里的不便之处在于列是一个因素。如果你想对字符串做一些事情,你必须先转换为字符

df$D = as.character(df$D)