R 基于其他变量的值创建新列

R 基于其他变量的值创建新列,r,dataframe,R,Dataframe,我有如下数据: 一组10个字符的变量 Char<-c("A","B","C","D","E","F","G","H","I","J") 或者任何其他可以扩展到一个巨大的数据帧的方法,如果您想使用每列作为某个向量的索引(我将使用字母,这样我可以索引到25),返回一个与DF维度相同的数据帧,您可以使用: transformed <- as.data.frame(lapply(DF, function(x) letters[x])) head(transformed) # Col1

我有如下数据:

一组10个字符的变量

Char<-c("A","B","C","D","E","F","G","H","I","J")

或者任何其他可以扩展到一个巨大的数据帧的方法,如果您想使用每列作为某个向量的索引(我将使用
字母
,这样我可以索引到25),返回一个与
DF
维度相同的数据帧,您可以使用:

transformed <- as.data.frame(lapply(DF, function(x) letters[x]))
head(transformed)
#   Col1 Col2
# 1    a    a
# 2    b    a
# 3    c    a
# 4    d    a
# 5    e    a
# 6    f    b

transformed我知道在R中使用循环可能是一种禁忌,但我尝试了一下,效果很好

for (i in length(DF$Col2)) {
    DF$Col3[i] <- Char[DF$Col2[i]]
}
for(长度为i(DF$Col2)){

DF$Col3[i]为什么不制作一个键并加入

library(dplyr)

letter_key = data_frame(letter__ID = 1:26,
                        letter = letters)

DF %>%
  rename(letter__ID = Col2) %>%
  left_join(letter_key)
这种事情也可以通过Col2可能采用的因子值来完成
# Values that Col2 might have taken
levels = c(1, 2, 3, 4, 5)

# Labels for the levels in same order as levels
labels = c('A', 'B', 'C', 'D', 'E')

DF$Col3 <- factor(DF$Col2, levels = levels, labels = labels)
级别=c(1,2,3,4,5) #标高的标签顺序与标高相同 标签=c('A','B','c','D','E')
DF$Col3
Char[Col2]
在您的示例中给出了输出。这就是您所需要的吗?我喜欢它的简单性。它在这个示例中效果很好,但在我的数据集中,Col2不是一个简单的数字序列。但是如果我可以获取我的实际数据,并将其转换为上面所述的一系列数字(可能使用unique?)如果你的查找代码不同,你可以命名
Char
向量,它将充当一个查找表。
names(Char)我喜欢循环,因为我觉得它们更直观一些
for (i in length(DF$Col2)) {
    DF$Col3[i] <- Char[DF$Col2[i]]
}
library(dplyr)

letter_key = data_frame(letter__ID = 1:26,
                        letter = letters)

DF %>%
  rename(letter__ID = Col2) %>%
  left_join(letter_key)
# Values that Col2 might have taken
levels = c(1, 2, 3, 4, 5)

# Labels for the levels in same order as levels
labels = c('A', 'B', 'C', 'D', 'E')

DF$Col3 <- factor(DF$Col2, levels = levels, labels = labels)