我需要用相应的字符串替换列中的值。在我的搜索中,我遇到了类似的问题,其答案与我正在寻找的内容非常匹配,但完全不符合我的需求。由于我是初学者,如果你能解释这段代码的工作原理会有所帮助。
我想从像这样的数据集
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;部分匹配相应的值。
提前谢谢!
答案 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)