我有一个data.frame 'data',其中一个列包含1:100之间的整数值,它们是它们所代表的隔离的编码值。
下面是我的示例数据,' data ':
Size Isolate spin
1 primary 3 up
2 primary 4 down
3 sec 6 strange
4 ter 1 charm
5 sec 3 bottom
6 quart 2 top我有另一个data.frame,它包含整数和隔离的名称之间的键。
1 alpha
2 bravo
3 charlie
4 delta
5 echo
6 foxtrot
7 golf这个列表的长度是100个,太多了,不能用if/else手动输入。
我想知道一个简单的解决方案来替换我的第一个data.frame中的整数,正如您可以看到的那样,它不是按升序排列的,而是在第二个data.frame中使用相应的隔离名称。
我试过了,在研究之后:
data$Isolate <- as.numeric(factor(data$Isolate,
levels =c("alpha","bravo","charlie","delta","echo","foxtrot","golf")
)
)但这只是用N/A替换了隔离列。
发布于 2015-09-09 21:50:57
正如休伯特在评论中所说的,这是merge的一个简单用例。
假设第二个“键”数据帧的列名是“隔离”和"Isolate_Name",那么它就像
merge(data, key_data, by = "Isolate")默认情况下,“内部连接”只保留有匹配的记录。如果您担心丢失没有匹配的记录,可以添加参数all.x = TRUE。
如果您喜欢非基本包,这在data.table或dplyr中也很容易。
发布于 2015-09-09 21:44:21
使用factor,您可以尝试:
data$Isolate <- factor(data$Isolate,
levels=1:7,
labels =c("alpha","bravo","charlie","delta","echo","foxtrot","golf"))如果您有很多级别已经在他们自己的data.frame中,您可以将其自动化。
data$Isolate <- factor(data$Isolate,levels=code$No,labels=code$Value)用你的第二个data.frame,code
code <- read.table(text="1 alpha
2 bravo
3 charlie
4 delta
5 echo
6 foxtrot
7 golf",stringsAsFactor=FALSE)
names(code) <- c("No","Value")发布于 2015-09-09 21:50:52
df$Isolate <- df2[,1][df$Isolate]
# Size Isolate spin
# 1 primary charlie up
# 2 primary delta down
# 3 sec foxtrot strange
# 4 ter alpha charm
# 5 sec charlie bottom
# 6 quart bravo top您可以根据目标数据帧对查找数据框架进行子集。
数据
df <- structure(list(Size = structure(c(1L, 1L, 3L, 4L, 3L, 2L), .Label = c("primary",
"quart", "sec", "ter"), class = "factor"), Isolate = c(3L, 4L,
6L, 1L, 3L, 2L), spin = structure(c(6L, 3L, 4L, 2L, 1L, 5L), .Label = c("bottom",
"charm", "down", "strange", "top", "up"), class = "factor")), .Names = c("Size",
"Isolate", "spin"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
df2 <- structure(list(V2 = structure(1:7, .Label = c("alpha", "bravo",
"charlie", "delta", "echo", "foxtrot", "golf"), class = "factor")), .Names = "V2", class = "data.frame", row.names = c(NA,
-7L))https://stackoverflow.com/questions/32489584
复制相似问题