我有一个excel的数据,我读到它将其存储在数据框中,名称为" data"。类似地,我通过名称映射将每个变量的值标签及其代码放在单独的表中。我也阅读了这张表,并将其存储为名称" map"的数据框。
该文件的链接是 - https://www.wetransfer.com/downloads/bf0c5bfa88be20e4037d7fdc828ca66320161018075428/7f82a4
以下是阅读表格的代码 -
library("readxl")
data <- read_excel("data_v1.xlsx",sheet = "data")
map <- read_excel("data_v1.xlsx",sheet = "map")
如果您注意到代码数量较少的单元格为NA。
现在我想将值标签附加到从地图表到数据的每个代码。我正在进行搜索,我意识到其中一种方法是使用因子。我们在哪里定义级别和标签。我可以在地图文件中使用原始变量名称作为关卡,对于标签我可以使用&#34; _desc&#34;作为后缀。
有人可以建议一种有效的方法吗?我的意思是,如果我们可以在循环中执行此操作,而不是为单个变量编写代码?在我附加的数据文件中,这只是一个示例,原始数据文件将有超过100个变量,其中一个人需要执行此附加标签的任务。
最后,我如何附加变量标签?我的意思是,
Q1应该有标签&#34;就像品牌的包装一样#34; Q2应该有标签&#34;喜欢品牌的味道&#34; Q3应该有标签&#34;喜欢品牌的气味&#34; Q4应该有标签&#34;物有所值&#34;
我是否应该考虑创建一个单独的工作表,其中一列具有变量名称,另一列具有变量的标签?我们如何将这些标签附加到变量上,因为因素仅适用于我认为的值。
最后,我需要生成表/交叉表,其中应显示这些标签。应显示这些值+变量标签的图表。
谢谢!
普拉萨德
答案 0 :(得分:1)
从概念上讲,你需要这样的东西
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.shanesescott.segway.MainActivity">
<TextView
android:text="Segway Rental"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="84dp"
android:layout_marginStart="84dp"
android:id="@+id/textView"
android:typeface="sans"
android:textColorLink="?attr/actionModeSplitBackground"
android:textSize="30sp"
android:textStyle="normal|bold"
android:textAlignment="textStart"
android:textColor="@color/colorPrimary"
android:layout_alignParentTop="true" />
<TextView
android:text="Experience the wonder of this future advancement of transportation for a city group tour starting at noon each day "
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:layout_marginTop="13dp"
android:id="@+id/textView2"
android:textSize="21sp"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/paris_5014_1"
android:id="@+id/imageView4"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="14dp" />
<Button
android:text="RENT A SEGWAY"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/Bdisplay"
android:textSize="12sp"
android:onClick="onClickButton"
android:layout_alignBottom="@+id/imageView4"
android:layout_centerHorizontal="true" />
你去哪里......是一个判断问题。这项任务有多重复?做某些事情会有所不同,你能提前知道它们等等吗?如果你有100个要做的事情,并且在每种情况下地图中都有一个相应的变量同名并且_desc作为后缀那么我会编写一个假定的函数,就像这样:
city_labels <- map$City_desc[match(data$City, map$City)]
在上面的评论中修复了问题后,您可以执行以下操作:
getLabels <- function(var_name) {
map[,paste0(var_name, "_desc")][match(data[,var_name], map[,var_name])]
}
getLabels("City")
然后你有了翻译的数据集 - 将它存储在安全的地方: - )
答案 1 :(得分:0)
我会写一个for循环来完成这个重复的任务。人们需要检查数据和地图中的变量名是否相同。您的数据不可用,但我觉得下面应该可以使用。
for (i in names(data)[which(is.element(names(data),names(map)))]){
data[[i]] <- factor(data[[i]],
levels = na.omit(map[[i]]),
labels = na.omit(map[[paste0(i,"_desc")]]))
}
na.oimt将省略具有NA的行。